【问题标题】:How to determine size of fixed length array database column using JOOQ?如何使用 JOOQ 确定固定长度数组数据库列的大小?
【发布时间】:2017-07-20 06:59:07
【问题描述】:

给定这个具有固定长度数组列的 PostgreSQL 表:

CREATE TABLE test (
    id         integer,
    values     integer[4],
);

JOOQ 代码生成是否会创建一个 java 常量或方法来提供可以存储在值列中的最大元素数(即 4)?

在阅读了有关代码生成和 SQL 数组支持的 JOOQ 文档后,我找不到任何关于固定长度数组的具体内容。此外,在生成的提供此信息的代码中,没有任何东西会引起我的注意。

【问题讨论】:

    标签: java sql postgresql jooq


    【解决方案1】:

    不,jOOQ 3.9 版不知道数据库数组的任何固定大小或大小限制(无论是 PostgreSQL 数组类型还是 Oracle VARRAY 类型)。

    我已经为此注册了功能请求#5932

    【讨论】:

    • 谢谢卢卡斯。您是否知道计划将此功能添加到 JOOQ 的未来版本中?
    • @RDub:我已经为此注册了一个功能请求:github.com/jOOQ/jOOQ/issues/5932,但没有任何承诺。这听起来像是添加到现有类型系统中的一件不简单的事情,而且它可能不经常使用。
    • 我接受这个答案,因为它直接回答了我提出的问题。我对固定长度 PostgreSQL 数组的剩余问题添加了自己的答案。
    【解决方案2】:

    我问这个问题的部分原因是我担心 PostgreSQL 数据库中的数组溢出。在研究了一种使用直接 SQL 来确定大小约束的方法后,我注意到 PostgreSQL ARRAY 文档做出了这样的声明:

    然而,PostgreSQL 在任何情况下都不会强制执行大小限制。

    基于该语句,似乎不需要使用数组约束来强制执行大小,因为所有数组列似乎都被视为可变长度。因此,即使可以通过 JOOQ、Straight SQL 或任何其他方式检索 PostgreSQL 数组大小约束,又何必费心呢?

    【讨论】:

    • 哈,有趣的细节!但也许,您可以编写一个触发器来强制执行约束?
    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2015-04-23
    • 2016-11-14
    • 2011-05-30
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多