当前位置: 首页 > 知识库问答 >
问题:

jOOQ:在特定表中查找约束

丌官昊天
2023-03-14

在进行jOOQ不可知(无代码生成)迁移时,我遇到了一种情况,需要检查数据库中是否存在约束(唯一的外键),以便完成进一步的操作。

到目前为止,我尝试的是运行drop并尝试捕获异常,但它使事务失败,并停止后续迁移

dsl.alterTable(table).dropConstraint(constraintName).execute();
...
>>  ERROR: constraint "t_client_name_unique" of relation "t_client" does not exist

设置:

  • Spring
  • jOOQ无需代码生成
  • FlywayDB作为迁移库
  • Postgres

共有1个答案

汪弘毅
2023-03-14

对于jOOQ 3.13,我们正在大力投资支持更多这样的迁移场景。将来,我们将支持一些与供应商无关的information_schema样式视图,这些视图为所有数据库生成此类元信息:#8301

另一个可以立即帮助您的功能是本机DROP CONSTRAINT IF EXISTSsupport:#9557。当然,您可以使用纯SQL在PostgreSQL上运行此特定语句,直到#9557可用为止

或者,在您的情况下,由于您只使用PostgreSQL,您可以通过查询PostgreSQL的information_schema直接执行此操作。您可以生成information_schema表,然后运行此查询:

select *
from information_schema.table_constraints
where constraint_schema = :constraint_schema
and constraint_name = :constraint_name
 类似资料:
  • 我有一个清单,必须找到具体的对象。我必须按学生平均价值排序列表,并创建函数来搜索具有第二高价值的学生。如果与其他学生重复,则按函数返回较小的学生。这个任务的另一个要求(要妥善解决)是我不能创建任何对象。下面我留下了我正在使用的类的代码: 现在,我尝试通过对stream进行反向排序来解决这个问题,然后移除stream的第一个值,并比较stream的两个下一个对象并返回正确的一个。我可以使用for循环

  • 我有一个有许多表的数据库。我想开始使用jOOQ为我的应用程序。但是我不希望JOOQ为所有表生成代码,但只为表的一小部分生成代码。我如何配置它?

  • 我有一个JFace(带有底层SWT)。 树包含多行和多个级别。 我希望能够找到一个特定的树节点(通过文本标签比较),扩展到它的水平,并选择该项。 主要问题是我无法遍历,因为树以LAZY模式加载所有内容。 也许有一个选项可以通过搜索模型直接访问树项?

  • 问题内容: 这可能是一个琐碎的问题。但是,由于我正在研究很久以前由其他人创建的数据库,没有适当的文档或注释,因此遇到了一个关键问题,我需要知道如何将数据插入到特定表中吗?是否有任何脚本或其他方法可以标识数据源。换句话说,我需要知道是否通过某些过程,函数,手动…等插入了数据。我无法搜索所有过程或函数,它们有数百个。我正在使用SQL Developer,它是oracle 11g DB。 问题答案: 没

  • 问题内容: 我可以在Windows中转到regedit,然后转到edit-> find,然后键入要在计算机中找到的密钥(在我的情况下为Maxima),然后找到所需的密钥(为最大值)(在我的情况下为“ HKEY_LOCAL_MACHINE” \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Ma

  • 问题内容: 这是一个示例代码: 因此,这个位于productOrderContainer中的表有几列,根据几件事,将有几行,每行都有几列。一个例子是: 我想做的是例如获取此表的第一行。(行具有ID ,例如:),然后再次在该行跨度中寻找特定值 所以在伪代码中我想说的是: 给我桌子,给我第n行,给我值 问题答案: 您可以尝试关注 您还可以遍历表行以执行所需的任何功能。