I have a table:
CREATE TABLE movies( id text, data jsonb );
INSERT INTO movies(id, data) VALUES (
'1',
{
"actors": [
{
"name": "actor1",
"email": "actor1@somemail.com"
},
{
"name": "actor2",
"email": "actor2@somemail.com"
}
]
}
);
What I want is to delete the email field (key + value) from each json object of the actors array.
I've tried the following solution and although it does execute, it doesn't have any effect on the array at all:
update movies
set data = jsonb_set(data, '{actors}', (data->'actors') - '{actors, email}')
where id = '1';
To manipulate all items in the array, you will need to use a subquery:
UPDATE movies
SET data = jsonb_set(data, '{actors}', (
SELECT jsonb_agg(actor - 'email')
FROM jsonb_array_elements(data->'actors') actor
))
WHERE id = '1';