PostgreSQL从带有嵌套值的JSONB列生成的列

时间:2020-06-08 07:42:11

标签: sql postgresql jsonb generated-columns

我有一个带有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

1 个答案:

答案 0 :(得分:0)

使用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;

Demo on DB Fiddle

感谢RhodiumToad在#postgresql IRC频道中为此问题提供了解决方案?‍♂️