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

Posted

技术标签:

【中文标题】HSQLDB 无法删除未找到的外键约束对象【英文标题】:HSQLDB unable to drop foreign key constraint object not found 【发布时间】:2015-08-28 08:05:00 【问题描述】:

我们的 HSQLDB 数据库有一个从 PAYMENTS 表到 USERS 表的 FK 约束。我们在这里做错的是创建一个约束而不给它一个特定的名称。这会导致 HSQLDB 为您生成一个名称,例如SYS_FK_10985。

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

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

如果找到,它会被在同一更改集中执行的以下查询删除:

ALTER TABLE PAYMENTS DROP CONSTRAINT SYS_FK_10985;

补丁成功执行,drop约束命令被添加到HSQLDB的.log文件中,但是,当我们想要运行HSQLDB实例时,它会抛出一个错误,说找不到对象。

日志文件如下:

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

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

【问题讨论】:

除非是与图形相关的问题,否则请不要将屏幕截图粘贴到问题中。文字更好。 【参考方案1】:

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

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

【讨论】:

以上是关于HSQLDB 无法删除未找到的外键约束对象的主要内容,如果未能解决你的问题,请参考以下文章

删除具有外键约束且无级联删除 SQL 的行

禁止级联删除的外键约束

原因:java.sql.SQLException:无法删除表“投票”上的外键约束“FK336ctjyksuuwnpmffcogcdyet”引用的表“链接”

删除提示 FOREIGN KEY 约束引用”

ORACLE语句怎么删除外键约束,只是删约束,不是删表

sql。两个间的外键约束和插入数据问题