无法为 PostgreSQL 表应用 Flyway 迁移
Posted
技术标签:
【中文标题】无法为 PostgreSQL 表应用 Flyway 迁移【英文标题】:Cannot apply Flyway migration for a PostgreSQL table 【发布时间】:2021-08-29 19:56:32 【问题描述】:在我的 Java 应用程序中,我有以下迁移文件:
-- code omitted for brevity
create table if not exists demo_table
(
id bigint not null,
"company" varchar(50) not null,
"name" varchar(50) not null
);
create unique index if not exists demo_table_uuid_company_key
on demo_table (uuid, "company");
create index if not exists demo_table_name_company_key
on demo_table ("name", "company");
虽然我可以在 PostgreSQL 查询窗口上运行 sql
part part 部分或一次运行,但在运行我的 Java 应用程序时,它会引发以下错误:
“无法在表 demo_table 上创建索引(名称,公司):找不到数据库列“名称”。请确保使用正确的列名称,这取决于使用的命名策略(可能不是与实体中的属性名称相同,尤其是关系类型)"
我尝试了很多东西,例如从flyway_schema_history
表中删除相关的迁移行,删除demo_table
上的索引等。但仍然是同样的错误。如果我尝试从name
中删除双引号 (""),则会出现校验和错误。所以,由于name
是保留字,我使用双引号。我该如何解决?
另一方面,我不确定是否应该在application.yml
上更改这些参数:
spring:
flyway:
enabled: true
jpa:
hibernate:
ddl-auto: update
【问题讨论】:
还有其他人使用 Flyway 迁移或 PostgreSQL 吗? 【参考方案1】:脚本的一些小问题:
创建的第一列缺少逗号。
此列也称为id
,但索引引用uuid
。
解决此问题后,脚本可以完美地为我工作(使用引号)
如果您进行这些更改并收到校验和错误,请运行flyway repair
【讨论】:
非常感谢,投了赞成票。实际上我只是错过了问题中的逗号,但它存在于代码中。另一方面,如何运行 flyway 脚本?以上是关于无法为 PostgreSQL 表应用 Flyway 迁移的主要内容,如果未能解决你的问题,请参考以下文章
通过 Flyway SQL 脚本为 PostgreSQL 中新创建的列设置不为空
无法在 Spring 应用程序中使用 Flyway 1.6 进行迁移
Flyway - 自动增量 ID 不适用于 PostgreSQL 中的测试数据
带有PostgreSQL,Flyway和Hikari的Spring Boot 2:驱动程序声称不接受jdbcUrl
使用 Flyway 和 Docker 容器内的嵌入式 Postgresql 运行测试时出现 java.net.ConnectException
PostgreSQL ‘数据库不存在’ - Java Spring Boot、Flyway、Docker/PostgreSQL