具有嵌套值的 JSONB 列的 PostgreSQL 生成列
PostgreSQL Generated Column from a JSONB column with nested values
我在 table 后面有一个 JSONB 列:
CREATE TABLE movies (
contributors JSONB
);
列中的数据如下所示:
INSERT INTO movies (contributors) VALUES('[
{"last_name": "Robbins", "first_name": "Tim", "age": 61},
{"last_name": "Freeman", "first_name": "Morgan", "age": 83}
]');
现在我想添加一个生成的向量列。它应该只包含 JSONB 列的 last_name
:
ALTER TABLE movies ADD COLUMN search TSVECTOR
GENERATED ALWAYS AS (TO_TSVECTOR('simple',
/* need help here */
)) STORED;
谁能帮我解决这个问题?向量应如下所示 'freeman':2 'robbin':1
Demo on DB Fiddle
使用 JSON Path expression 您可以指定 JSON 数据中的项目。对于以下示例,将仅包含具有键 last_name
的项目:
ALTER TABLE movies ADD COLUMN search TSVECTOR
GENERATED ALWAYS AS (TO_TSVECTOR('simple',
jsonb_path_query_array(contributors, '$[*].last_name') /* ✅ */
)) STORED;
感谢#postgresql IRC 频道RhodiumToad
为这个问题提供解决方案♂️
我在 table 后面有一个 JSONB 列:
CREATE TABLE movies (
contributors JSONB
);
列中的数据如下所示:
INSERT INTO movies (contributors) VALUES('[
{"last_name": "Robbins", "first_name": "Tim", "age": 61},
{"last_name": "Freeman", "first_name": "Morgan", "age": 83}
]');
现在我想添加一个生成的向量列。它应该只包含 JSONB 列的 last_name
:
ALTER TABLE movies ADD COLUMN search TSVECTOR
GENERATED ALWAYS AS (TO_TSVECTOR('simple',
/* need help here */
)) STORED;
谁能帮我解决这个问题?向量应如下所示 'freeman':2 'robbin':1
Demo on DB Fiddle
使用 JSON Path expression 您可以指定 JSON 数据中的项目。对于以下示例,将仅包含具有键 last_name
的项目:
ALTER TABLE movies ADD COLUMN search TSVECTOR
GENERATED ALWAYS AS (TO_TSVECTOR('simple',
jsonb_path_query_array(contributors, '$[*].last_name') /* ✅ */
)) STORED;
感谢#postgresql IRC 频道RhodiumToad
为这个问题提供解决方案♂️