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.