Na základě mé staré odpovědi na dba.SE, kterou jste našli a dobře využili:
Můžete to udělat ještě o krok dále:
CREATE OR REPLACE FUNCTION f_array_remove_elem1(anyarray, anyelement)
RETURNS anyarray LANGUAGE sql IMMUTABLE AS
'SELECT $1[:idx-1] || $1[idx+1:] FROM array_position($1, $2) idx';
Tato funkce bere hodnotu prvku k odstranění jako 2. parametr. Pomocí polymorfního pseudotypu anyelement
podle toho, aby to fungovalo pro jakýkoli typ pole.
Poté UPDATE
prostě je:
UPDATE test_table
SET test_array = f_array_remove_elem1(test_array, 'B')
WHERE id = 1;
db<>fiddle zde
Při použití mé původní funkce f_array_remove_elem()
který zaujímá pozici indexu místo hodnoty prvku, můžete se obejít bez poddotazu:
UPDATE test_table
SET test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE id = 1;
Může být dokonce o něco rychlejší než moje nová funkce.
A všimněte si, že jednodušší verze v dolní části mé staré odpovědi funguje pro Postgres 9.6.