You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取PostgreSQL中jsonb列各值的数据类型?

获取PostgreSQL jsonb列值的实际数据类型

你用->>操作符返回全text类型是正常的——这个操作符的核心作用就是把jsonb字段里的值统一转成文本格式输出。要获取每个值的实际数据类型,或是保留原类型取出数据,可按以下方法处理:

1. 查看指定键值的实际数据类型

用PostgreSQL内置的jsonb_typeof函数,它会返回jsonb值的原生类型(比如string、number、boolean、null等)。针对你的数据集,查询uuid和size的类型可以这么写:

select
  id,
  data,
  jsonb_typeof(data -> 'uuid') as uuid_type,
  jsonb_typeof(data -> 'size') as size_type
from "postgres"."public"."_airbyte_stream"
where data ->> 'form_id' = 'base';

这里data -> 'uuid'返回的是jsonb类型的原始值,再套一层jsonb_typeof就能拿到它的实际类型。

2. 保留原类型取出字段值

如果不想转成text,而是保留jsonb的原生类型(比如数字就是numeric类型),直接用->操作符代替->>即可,它会返回jsonb类型的值。如果需要转成对应SQL类型,可直接加类型转换:

select
  ab_id,
  data,
  -- 保留jsonb原生类型
  data -> 'no_of_meals_per_day' as no_of_meals_per_day_jsonb,
  -- 转换为SQL整数类型(需确保值本身是数字,否则会报错)
  (data -> 'no_of_meals_per_day')::int as no_of_meals_per_day_int
from "postgres"."public"."_airbyte_stream"
where data ->> 'form_id' = 'base';

注意:转换SQL类型前,最好先用jsonb_typeof确认值的类型,避免类型不匹配报错。

3. 遍历jsonb对象所有键值对及类型

如果需要一次性拿到jsonb对象里所有键的名称和对应值的类型,用jsonb_each函数拆分对象:

select
  id,
  jsonb_key as key_name,
  jsonb_typeof(jsonb_value) as value_type,
  jsonb_value as original_value
from "postgres"."public"."_airbyte_stream",
     jsonb_each(data)
where data ->> 'form_id' = 'base';

这个查询会把每个jsonb对象拆成多行,每行对应一个键值对的名称、类型和原始值。

内容的提问来源于stack exchange,提问作者Siddhant Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:55:16