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

使用JOOQ获取Postgres UDT值

慎风畔
2023-03-14

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

CREATE TYPE MY_TYPE AS ENUM ('FAILED', 'SUCCESS');
\dT+ MY_TYPE
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   |          |                   | 

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

谢了!

共有1个答案

盛柏
2023-03-14

我假设您希望动态地从数据库中获取所有枚举文本的列表。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运行这个查询,就可以获得如下内容(来自Sakila数据库):

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             |
 类似资料:
  • 我一直在使用模式。方法来获取模式中的表列表,但今天我发现该方法返回的是执行jOOQ代码生成时存在的表列表,而不是此时存在的表。 我的具体用例是随着时间的推移创建表(自动分区),我们的Java服务对它们执行一些操作。 在jOOQ中有没有办法从DB中获取当前的表列表? 我可以求助于查询信息模式。直接使用表,但我更愿意重用来自jOOQ的方法(如果可用的话)。

  • 我有一个问题..为什么要重复我在fetch方法中选择的内容。 所以我提供了CON\u CAL\u INSTANCE.DATE。min()在我的select子句中,为什么我必须在fetchOne(CON\u CAL\u INSTANCE.DATE.min())中重复它? 还是我做得不对?

  • 我有三张桌子: 用户键表具有来自用户和键表的主键,以建立用户和键之间的关系。 如何使用所有相关键获取用户? 如果存在其他表(例如,UserRoles)等,该怎么办?通常,如何获取用户和所有通过外键表相关的相关行?

  • 我知道,要获取地图,我可以使用fetchMap,但它不支持LinkedHashMap,我想保持由orderBy创建的插入顺序。 我试过了 但是字段1和字段2部分给了我以下错误。 无法解析“T”中的方法“field1” 希望有人能帮我~ 谢谢 解决方案: 基于@Lukas的回答,我尝试了几次,发现必须做到以下几点: > 在方法中,所有字段都必须有一个类型,除了那些计算的,其中添加类型会抛出在字段列表

  • 我有一个主键值,我想获取一个记录以进行更新,所以现在我写: JOOQ知道我的表的主键(例如,它会生成onKey()方法等)-因此我希望得到如下结果: 但这似乎不是一件事。有没有更简洁的方法使用JOOQ API来做我想要的事情?

  • 我是新来的jooq,并试图与postgres使用fetchLazy。 我像下面这样修改了本文中提到的数据访问代码 我的交易代码如下所示- 为了测试,我在数据库中添加了4条记录。即使设置为2,我也会在一次获取中获取所有4条记录。 所有修改过的代码都放在github中。 有人能让我知道出了什么问题吗? Jooq版本3.14.1 Postgres以码头工人的身份运行