使用JOOQ获取Postgres UDT值

时间:2018-06-13 15:57:32

标签: postgresql spring-boot jooq

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

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

在postgres cli中,我可以像

一样检索UDT值
\dT+ MY_TYPE

列出了UDT的详细信息,包括其在' Elements'下的枚举值。柱

编辑:添加" \ 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类型,但这是获取所需信息的唯一方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我假设您想要动态地从数据库中获取所有枚举文字的列表。 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             |