#800·migrate

Postgres - 即使使用了"IF NOT EXISTS",也会出现关于现有架构的错误

作者: oscarcalderonc创建于 2022年8月24日更新于 2026年9月23日

描述错误 我有一个迁移,如01 SQL文件,内容如下:

sql
CREATE SCHEMA IF NOT EXISTS my_schema;
...

然后,在我的代码中,我以以下方式启动新的迁移:

go
// 将数据库迁移到最新的架构
driver, err := postgres.WithInstance(db, &postgres.Config{})
if err != nil {
	return nil, errors.Wrap(err, "Error creating database connection that is needed to run a database migration.")
}
m, err := migrate.NewWithDatabaseInstance(migrationDirectory, "postgres", driver)
if err != nil {
	return nil, errors.Wrap(err, "Error creating a database migration instance.")
}
err = m.Up()
if err != nil && err.Error() != "no change" {
	return nil, errors.Wrap(err, "Error running a database migration up.")
}

然而,即使使用IF NOT EXISTS子句,迁移也会抛出错误,表明架构已存在:

log
my-app-db     | 2022-08-24 03:35:51.333 UTC [119] ERROR:  schema "my_schema" already exists
my-app-db     | 2022-08-24 03:35:51.333 UTC [119] STATEMENT:  CREATE SCHEMA IF NOT EXISTS my_schema;

重现步骤 重现行为的步骤:

  1. 我的迁移类似于'...'
  2. 我使用以下选项运行迁移'....'
  3. 查看错误

内容来源: golang-migrate/migrate