From da6c505f41c91d7c1e97a53178a1b7412e9b89b4 Mon Sep 17 00:00:00 2001 From: Russ Egan Date: Fri, 6 Jan 2017 15:52:54 -0500 Subject: [PATCH] Avoid DDL when checking for versions table #134 --- driver/postgres/postgres.go | 8 ++++++++ driver/postgres/postgres_test.go | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/driver/postgres/postgres.go b/driver/postgres/postgres.go index 502c7d1..951b005 100644 --- a/driver/postgres/postgres.go +++ b/driver/postgres/postgres.go @@ -43,6 +43,14 @@ func (driver *Driver) Close() error { } func (driver *Driver) ensureVersionTableExists() error { + r := driver.db.QueryRow("SELECT count(*) FROM information_schema.tables WHERE table_name = $1;", tableName) + c := 0 + if err := r.Scan(&c); err != nil { + return err + } + if c > 0 { + return nil + } if _, err := driver.db.Exec("CREATE TABLE IF NOT EXISTS " + tableName + " (version int not null primary key);"); err != nil { return err } diff --git a/driver/postgres/postgres_test.go b/driver/postgres/postgres_test.go index a1c0495..7c5c0c3 100644 --- a/driver/postgres/postgres_test.go +++ b/driver/postgres/postgres_test.go @@ -37,6 +37,11 @@ func TestMigrate(t *testing.T) { t.Fatal(err) } + // testing idempotency: second call should be a no-op, since table already exists + if err := d.Initialize(driverUrl); err != nil { + t.Fatal(err) + } + files := []file.File{ { Path: "/foobar",