PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como enviar um objeto JSON para uma matriz aninhada em uma coluna JSONB


O truque para jsonb_set() é que ele modifica parte de um jsonb objeto, mas retorna o objeto inteiro. Então você passa o valor atual da coluna e o caminho que deseja modificar ("páginas" aqui, como um array de strings), então você pega o array existente (my_column->'pages' ) e anexar || o novo objeto para ele. Todas as outras partes do jsonb objeto permanecem como eram. Você está efetivamente atribuindo um objeto completamente novo à coluna, mas isso é irrelevante porque um UPDATE grava uma nova linha na tabela física de qualquer maneira.
UPDATE my_table
SET my_column = jsonb_set(my_column, '{pages}', my_column->'pages' || new_json, true);

O opcional create_missing parâmetro definido como true aqui adiciona o objeto "pages" se ele ainda não existir.