Tengo la siguiente tabla con una columna JSONB:
CREATE TABLE movies ( contributors JSONB );Los datos en la columna se ven así:
INSERT INTO movies (contributors) VALUES('[ {"last_name": "Robbins", "first_name": "Tim", "age": 61}, {"last_name": "Freeman", "first_name": "Morgan", "age": 83} ]'); Ahora quiero agregar una columna generada de vectores. Solo debe contener last_name de la columna JSONB:
ALTER TABLE movies ADD COLUMN search TSVECTOR GENERATED ALWAYS AS (TO_TSVECTOR('simple', /* need help here 🙏 */ )) STORED; ¿Alguien puede ayudarme a hacer eso? Los vectores deberían verse así 'freeman':2 'robbin':1 Demostración en DB Fiddle
Con la expresión JSON Path puede especificar los elementos en los datos JSON. Con el siguiente ejemplo, solo se incluirán los elementos con la clave last_name :
ALTER TABLE movies ADD COLUMN search TSVECTOR GENERATED ALWAYS AS (TO_TSVECTOR('simple', jsonb_path_query_array(contributors, '$[*].last_name') /* ✅ */ )) STORED; Gracias RhodiumToad en el canal IRC #postgresql por brindar una solución a este problema 🙇♂️