From 3c91df140a6f3d3433f567f1b95a7151de11f333 Mon Sep 17 00:00:00 2001 From: Michael Fridman Date: Sun, 5 Jan 2025 08:06:00 -0500 Subject: [PATCH] fix: use schema name if explicitly set on table name for table existence (#883) --- CHANGELOG.md | 3 +++ internal/dialect/dialectquery/postgres.go | 17 +++++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aab29c1bd..e64d43ca1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +- Fix regression (`v3.23.1` and `v3.24.0`) in postgres migration table existence check for + non-default schema. (#882, #883) + ## [v3.24.0] - Add support for loading environment variables from `.env` files, enabled by default. diff --git a/internal/dialect/dialectquery/postgres.go b/internal/dialect/dialectquery/postgres.go index facbc2ff7..21ba63b36 100644 --- a/internal/dialect/dialectquery/postgres.go +++ b/internal/dialect/dialectquery/postgres.go @@ -5,13 +5,6 @@ import ( "strings" ) -const ( - // defaultSchemaName is the default schema name for Postgres. - // - // https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PUBLIC - defaultSchemaName = "public" -) - type Postgres struct{} var _ Querier = (*Postgres)(nil) @@ -53,14 +46,18 @@ func (p *Postgres) GetLatestVersion(tableName string) string { func (p *Postgres) TableExists(tableName string) string { schemaName, tableName := parseTableIdentifier(tableName) - q := `SELECT EXISTS ( SELECT FROM pg_tables WHERE schemaname = '%s' AND tablename = '%s' )` - return fmt.Sprintf(q, schemaName, tableName) + if schemaName != "" { + q := `SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE schemaname = '%s' AND tablename = '%s' )` + return fmt.Sprintf(q, schemaName, tableName) + } + q := `SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE tablename = '%s' )` + return fmt.Sprintf(q, tableName) } func parseTableIdentifier(name string) (schema, table string) { schema, table, found := strings.Cut(name, ".") if !found { - return defaultSchemaName, name + return "", name } return schema, table }