Liquibase错误:关系“databasechangeloglock”已经存在。

3
在运行Liquibase迁移时,Docker容器返回以下错误:
Unexpected error running Liquibase: ERROR: relation 
"databasechangeloglock" already exists [Failed SQL: 
(0) CREATE TABLE public.databasechangeloglock (ID 
INTEGER NOT NULL, LOCKED BOOLEAN NOT NULL, 
LOCKGRANTED TIMESTAMP WITHOUT TIME ZONE, LOCKEDBY 
VARCHAR(255), CONSTRAINT databasechangeloglock_pkey 
PRIMARY KEY (ID))]

liquibase正在使用的IAM帐户具有cloudsqlsuperuser角色。 此外,我查询了这个表,但在数据库中不存在。

您认为这个用户可能缺少什么权限?当我在gcp中查看日志时,我确实看到了一个权限错误:

ERROR: permission denied for table databasechangeloglock

然而,这个用户似乎对所有表和序列都有权限。


1
你看过这个[回答](https://stackoverflow.com/questions/50673003/how-to-setup-vault-and-postgres-in-google-cloud-to-have-the-correct-permissions)吗?这可能有所帮助。 - Catherine O
是的,我找到了另一篇帖子,其中包含与@CatherineO上面给出的基本相同的答案:Liquibase:关系“databasechangeloglock”已经存在,使用grails插件和非默认模式 - tabbyfoo
1
谢谢!是的,事实证明当初迁移是使用不同的用户运行的,当我们在Postgres中添加一个新的迁移专用用户时,该新用户无法对databsechangeloglock表进行许可。最终我创建了一个新的数据库,但@CatherineO标记的答案也可以解决它。 - Prasoon
2个回答

3

(复制了答案的评论)

结果证明,迁移最初是由不同的用户运行的,当我们在Postgres中添加了一个新的迁移专用用户时,新用户就无法对databsechangeloglock表进行授权。我最终创建了一个新的数据库,但由@CatherineO标记的答案也可以解决这个问题。

参考资料:


-1

MySQL 可能已禁用大小写敏感性,而新的版本启用了大小写敏感性,导致出现此问题。通过在 mysqld.conf 中设置 lower_case_table_names=1 来禁用大小写敏感性,可以解决此错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接