dba.SE पर मेरे पुराने उत्तर के आधार पर जो आपने पाया और अच्छे उपयोग में लाया:
आप इसे एक कदम आगे ले जा सकते हैं:
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';
यह फ़ंक्शन दूसरे पैरामीटर के रूप में निकालने के लिए तत्व का मान लेता है। बहुरूपी छद्म-प्रकार का उपयोग करना anyelement
तदनुसार किसी भी सरणी प्रकार के लिए यह कार्य करने के लिए।
फिर UPDATE
बस है:
UPDATE test_table
SET test_array = f_array_remove_elem1(test_array, 'B')
WHERE id = 1;
db<>fiddle यहां
मेरे मूल फ़ंक्शन का उपयोग करते समय f_array_remove_elem()
जो तत्व मान के बजाय अनुक्रमणिका स्थिति लेता है, आप सबक्वायरी के बिना कर सकते हैं:
UPDATE test_table
SET test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE id = 1;
मेरे नए फ़ंक्शन से थोड़ा तेज़ भी हो सकता है।
और ध्यान दें कि मेरे पुराने उत्तर के निचले भाग में सरल संस्करण Postgres 9.6 के लिए काम करता है।