根据我在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 <>在这里拨弄
当使用我的原始函数f_array_remove_elem()
获取索引位置而不是元素值时,您可以不使用子查询:
UPDATE test_table
SET test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE id = 1;