【问题标题】:Set PostgreSQL search_path in jOOQ在 jOOQ 中设置 PostgreSQL search_path
【发布时间】:2015-01-09 21:46:22
【问题描述】:

回到 jOOQ 2.5,看起来您可以通过 FactoryOperations 类设置 PostgreSQL 搜索路径,但该类在 jOOQ 3.5 中消失了。显然 FactoryOperations 分为 DSL 和 DSLContext,但我似乎无法找到 use(Schema) 方法在哪里结束。我们如何在更新的 jOOQ 版本中设置 PostgreSQL search_path?

【问题讨论】:

  • 你知道你可以做一个alter user foo set search_path = ...然后你总是有正确的路径,不管工具。
  • @a_horse_with_no_name - 谢谢你提到这一点。不幸的是,在这种情况下,同一个用户将需要访问几个相同的模式。
  • 对不同的应用程序使用不同的用户(具有不同的搜索路径)可能是另一种解决方案。

标签: postgresql jooq


【解决方案1】:

当 jOOQ 3.0 发布时,其中一些“遗留”功能被删除,主要是因为它们没有经过深思熟虑。在这种特殊情况下,use(Schema) 方法假装 jOOQ 支持的不同 RDBMS 实际上对“当前模式”是什么有一个共同的想法。然而,对于那些将 jOOQ 与多个数据库一起使用的用户来说,该实现有点误导和混淆。

More information on the jOOQ 3.0 feature removals here.

今天的解决办法是

1。使用特定于供应商的命令,例如

ALTER USER my_user SET search_path = ...

More info about that here

2。使用 jOOQ 的运行时模式映射功能

使用此功能,您可以在运行时指定 jOOQ 生成的真实模式名称。例如,如果您生成的代码中的架构是 FOO 并且生成的“普通”SQL 语句如下所示:

SELECT foo.table.column FROM foo.table

您可以指定从FOOBAR 的映射,以让 jOOQ 生成以下 SQL,而无需接触您的 Java 代码:

SELECT bar.table.column FROM bar.table

More info about that here

【讨论】:

  • 我们正在使用 jOOQ 的运行时模式映射。但是,任何包含无模式引用的用户定义函数都使用搜索路径而不是定义函数的模式。也许这需要一个不同的问题?
  • @Fuwjax:嗯,很有趣——是的,绝对是另一个问题的好材料! (For future readers, the question is here)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-22
  • 2013-03-28
  • 2019-11-12
  • 2021-09-25
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多