Berdasarkan jawaban lama saya di dba.SE yang Anda temukan dan manfaatkan dengan baik:
Anda dapat mengambil satu langkah lebih jauh:
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';
Fungsi ini mengambil nilai elemen yang akan dihapus sebagai parameter ke-2. Menggunakan anyelement
tipe-semu polimorfik sesuai untuk membuat ini berfungsi untuk semua jenis array.
Kemudian UPDATE
sederhananya adalah:
UPDATE test_table
SET test_array = f_array_remove_elem1(test_array, 'B')
WHERE id = 1;
db<>fiddle di sini
Saat menggunakan fungsi asli saya f_array_remove_elem()
yang mengambil posisi indeks alih-alih nilai elemen, Anda dapat melakukannya tanpa subkueri:
UPDATE test_table
SET test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE id = 1;
Bahkan mungkin sedikit lebih cepat daripada fungsi baru saya.
Dan perhatikan bahwa versi yang lebih sederhana di bagian bawah jawaban lama saya berfungsi untuk Postgres 9.6.