在进行与jOOQ无关的迁移(不生成代码)时,我遇到一种情况,我需要检查数据库中是否已经存在约束(唯一,外键)以完成进一步的操作。
到目前为止,我一直在尝试运行drop并尝试捕获异常,但是它使事务失败并停止了后续迁移的发生
dsl.alterTable(table).dropConstraint(constraintName).execute();
...
>> ERROR: constraint "t_client_name_unique" of relation "t_client" does not exist
设置:
information_schema
样式视图,这些视图可为所有数据库生成这种元信息:#8301[另外一个可以立即为您提供帮助的功能将是本机DROP CONSTRAINT IF EXISTS
支持:#9557。您当然可以使用plain SQL在PostgreSQL上运行此特定语句,直到#9557可用
目前的解决方案
information_schema
来执行此操作。您可以生成information_schema
表,然后运行此查询:select *
from information_schema.table_constraints
where constraint_schema = :constraint_schema
and constraint_name = :constraint_name