Baseret på mit gamle svar på dba.SE, som du har fundet og brugt:
Du kan tage det et skridt videre:
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';
Denne funktion tager værdien af det element, der skal fjernes, som 2. parameter. Brug af den polymorfe pseudo-type anyelement
derfor for at få dette til at fungere for enhver array-type.
Derefter UPDATE
er simpelthen:
UPDATE test_table
SET test_array = f_array_remove_elem1(test_array, 'B')
WHERE id = 1;
db<>fiddle her
Mens jeg bruger min oprindelige funktion f_array_remove_elem()
der tager indekspositionen i stedet for elementværdien, kunne du undvære en underforespørgsel:
UPDATE test_table
SET test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE id = 1;
Måske endda en smule hurtigere end min nye funktion.
Og bemærk, at den enklere version nederst i mit gamle svar fungerer for Postgres 9.6.