Na podstawie mojej starej odpowiedzi na dba.SE, którą znalazłeś i dobrze wykorzystałeś:
Możesz pójść o krok dalej:
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';
Ta funkcja przyjmuje wartość elementu do usunięcia jako drugi parametr. Używanie polimorficznego pseudotypu anyelement
zgodnie z tym, aby działało to dla każdego typu tablicy.
Następnie UPDATE
po prostu jest:
UPDATE test_table
SET test_array = f_array_remove_elem1(test_array, 'B')
WHERE id = 1;
db<>fiddle tutaj
Podczas korzystania z mojej oryginalnej funkcji f_array_remove_elem()
który przyjmuje pozycję indeksu zamiast wartości elementu, możesz obejść się bez podzapytania:
UPDATE test_table
SET test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE id = 1;
Może być nawet trochę szybsza niż moja nowa funkcja.
I zauważ, że prostsza wersja na dole mojej starej odpowiedzi działa w Postgresie 9.6.