HSQLDB无法删除未找到的外键约束对象

问题描述:

我们的HSQLDB数据库具有从PAYMENTS表到USERS表的FK约束。我们在这里做错了什么是创建一个约束,而不给它一个特定的名称。这会导致HSQLDB为你生成一个名字,例如SYS_FK_10985。HSQLDB无法删除未找到的外键约束对象

我所做的是为Liquibase编写一个自定义更改集,它将查找索引的名称并将其删除。什么是脚本所做的是非常简单的:

ALTER TABLE PAYMENTS DROP CONSTRAINT SYS_FK_10985; 

成功执行补丁和降约束的命令是:

SELECT constraint_name FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME= 'PAYMENTS' AND COLUMN_NAME= 'USER_ID'; 

如果找到了,它是由相同的变更集执行以下查询回落添加到HSQLDB的.log文件中,然而,当我们想要运行HSQLDB实例时,它会抛出一个错误,指出无法找到该对象。

HSQLDB throws exception

日志文件如下所示:

DB log file

的主要问题是错误的索引(一个不存在的一个)在日志文件中,这自然会导致被丢弃HSQLDB抛出异常。更糟糕的是:发生异常时,该行后的所有内容都将从日志文件中删除,甚至不会存储在.data文件中。

约束名称更改是否可能导致更改集名称错误?

+0

请不要将截图粘贴到问题中,除非它是一个图形相关的问题。文字更好。 – SteveDonie

您需要在此操作后执行CHECKPOINT或任何一系列结构更改。

CHECKPOINT会将更改保存到.script文件中并删除.log文件,从而避免出现问题。