具有嵌套值的 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;

Demo on DB Fiddle

感谢#postgresql IRC 频道RhodiumToad 为这个问题提供解决方案‍♂️