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抛出异常。更糟糕的是:发生异常时,该行后的所有内容都将从日志文件中删除,甚至不会存储在.data文件中。
约束名称更改是否可能导致更改集名称错误?
答
您需要在此操作后执行CHECKPOINT或任何一系列结构更改。
CHECKPOINT会将更改保存到.script文件中并删除.log文件,从而避免出现问题。
请不要将截图粘贴到问题中,除非它是一个图形相关的问题。文字更好。 – SteveDonie