为什么PostgreSQL会返回jsonb的“select *”,而PGobject的“select data”?

tyu7yeag  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(56)

我使用Jooq(没有codegen)创建SQL查询并将其发送到数据库。我测试的表只有2列,ID是字符串,数据列是JSONB。
有趣的是,如果我以这种格式生成一个查询:

select * from test_table where id = 'some_id'

字符串
我得到的Map中有一个String和一个JSONB(我猜和预期的一样)。
但是,如果我将查询更改为:

select id, data from test_table where id = 'some_id'


由这样的代码生成:

select(field(ID_COLUMN), field(DATA_COLUMN))
  .from(DSL.table("test_table"))
  .where(field(ID_COLUMN).eq(id))
  .fetch().intoMaps();


(for第一个例子,它是相同的,但与asterisk(),而不是两个字段)
我得到的Map有一个String作为ID,但是现在,数据列是一个包含JSONB数据的PG对象。
我可以很好地处理这两种类型中的任何一种,但我希望了解是什么触发了更改,以及我是否可以依赖于基于我的实现的一种类型或另一种类型。

slsn1g29

slsn1g291#

您可能有充分的理由使用jOOQ而不使用代码生成器which would help with all of these data type related problems(主要的理由是只有在运行时才知道的动态模式,其中代码生成不起作用),但即使您没有使用代码生成器,也可以显式地向jOOQ提示类型,例如。

field(DATA_COLUMN, SQLDataType.JSONB)

字符串
否则,jOOQ将不知道PostgreSQL返回什么,它不能为你做决定。我不会依赖于服务器或驱动程序的任何隐式行为。

相关问题