postgresql - Postgresql jsonb 列到行提取值
问题描述
我有下表
BEGIN;
CREATE TABLE IF NOT EXISTS "public".appevents (
id uuid DEFAULT uuid_generate_v4() NOT NULL,
"eventId" uuid NOT NULL,
name text NOT NULL,
"creationTime" timestamp without time zone NOT NULL,
"creationTimeInMilliseconds" bigint NOT NULL,
metadata jsonb NOT NULL,
PRIMARY KEY(id)
);
COMMIT;
我想通过查询将metadata
jsonb 列提取为一行,并尝试使用以下查询。
SELECT
userId
FROM
appevents, jsonb_to_record(appevents.metadata) as x(userId text)
不幸的是,返回的所有行userid
的值都为 NULL,这是不正确的。注意到的唯一奇怪的事情是它正在将驼峰字母转换为小写,但似乎不是问题。
这是我目前在数据库中userId
存在的两条记录。
解决方案
注意到的唯一奇怪的事情是它正在将驼峰字母转换为小写,但似乎不是问题。
实际上这是罪魁祸首 - 默认情况下,列名不区分大小写,并且userId
被规范化为userid
,JSON 不包含属性。引用标识符 ( … as x("userId" text)
) 应该可以。
但是,有一个更简单的解决方案可以将 json 对象属性作为文本访问:->>
操作符。您可以使用
SELECT metadata->>'userId' AS userid FROM appevents
推荐阅读
- android - Android Emulator 7.1.1 white screen
- hyperlink - How to remove hyperlink on my text
- python - insert query not working python oracle
- pthreads - 不同进程的线程通信
- c++ - 无法在 Mac OS X 上链接静态库
- php - Symfony 搜索,参数未发送
- c# - Best way to make a WPF application that will later become a library for a AutoCAD .net program
- java - Java多线程同步问题
- python - 如何使用 python 3.x 从远程 url 打印 csv 内容?
- java - How to access for loop variables outside for loop?