【问题标题】:get Postgres UDT value with JOOQ使用 JOOQ 获取 Postgres UDT 值
【发布时间】:2018-06-13 15:57:31
【问题描述】:

在 Postgres 中,我创建了一个 UDT,如下所示

CREATE TYPE MY_TYPE AS ENUM ('FAILED', 'SUCCESS');

在 postgres cli 中,我可以像这样检索 UDT 值

\dT+ MY_TYPE

其中列出了 UDT 的详细信息,包括“元素”列下的枚举值

编辑:添加“\dT+”命令的结果

postgres=# \dT+ status_type
                                         List of data types
 Schema |    Name     | Internal name | Size | Elements |  Owner   | Access privileges | Description 
--------+-------------+---------------+------+----------+----------+-------------------+-------------
 public | status_type | status_type   | 4    | WAITING +| Postgres |                   | 
        |             |               |      | STARTED +|          |                   | 
        |             |               |      | PAUSED  +|          |                   | 
        |             |               |      | SUCCESS +|          |                   | 
        |             |               |      | FAILED   |          |                   | 

现在,我在一个 Spring 项目中使用 JOOQ,并希望使用 JOOQ 获得该 UDT 的价值。任何人都可以帮助我完成这项工作吗?

注意:我知道 JOOQ 在生成类时会生成 ENUM 类型,但这是获取我需要的信息的唯一方法吗?

谢谢!

【问题讨论】:

    标签: postgresql spring-boot jooq


    【解决方案1】:

    我假设您想动态地从数据库中获取所有枚举文字的列表。 jOOQ 代码生成器用于此的 SQL 查询类似于:

    SELECT n.nspname, t.typname, e.enumlabel, e.enumsortorder
    FROM pg_enum e
    JOIN pg_type t ON e.enumtypid = t.oid
    JOIN pg_namespace n ON t.typnamespace = n.oid
    ORDER BY n.nspname, t.typname, e.enumsortorder
    

    现在,只需像任何其他查询一样使用 jOOQ 运行此查询即可获得类似的结果 (from the Sakila database):

    nspname |typname     |enumlabel |enumsortorder |
    --------|------------|----------|--------------|
    public  |mpaa_rating |G         |1             |
    public  |mpaa_rating |PG        |2             |
    public  |mpaa_rating |PG-13     |3             |
    public  |mpaa_rating |R         |4             |
    public  |mpaa_rating |NC-17     |5             |
    

    【讨论】:

    • 我相信你提到的查询给出了可用的枚举列表。但是,我正在寻找的是获取为特定枚举定义的值。我编辑了帖子以显示“\dT+”命令返回的内容。那么,有没有办法在 jooq 中做到这一点,或者执行任何 Postgres 的元命令?
    • 我也知道有基于查询的方法可以做到这一点。但是,我想知道 Postgres 元命令是否可以通过 JOOQ 执行。如果没有,我可以回退到基于查询的解决方案
    • 是的,哎呀,已经为查询添加了一个过滤器:) 不,jOOQ 不解释那些 psql 特定的命令。如果您使用的是纯 SQL,jOOQ 只会将所有内容发送到 JDBC 驱动程序,并且也不支持像 \dT+... 之类的任何内容
    猜你喜欢
    • 1970-01-01
    • 2014-04-16
    • 2017-02-08
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2014-09-23
    相关资源
    最近更新 更多