PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Entfernt einen nicht eindeutigen Wert aus einem Array

Basierend auf meiner alten Antwort auf dba.SE, die Sie gefunden und sinnvoll genutzt haben:

Sie könnten noch einen Schritt weiter gehen:

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';

Diese Funktion nimmt den Wert des zu entfernenden Elements als zweiten Parameter. Verwendung des polymorphen Pseudotyps anyelement entsprechend, damit dies für jeden Array-Typ funktioniert.

Dann das UPDATE ist einfach:

UPDATE test_table
SET    test_array = f_array_remove_elem1(test_array, 'B')
WHERE  id = 1;

db<>fiddle hier

Während ich meine ursprüngliche Funktion f_array_remove_elem() verwende die anstelle des Elementwertes die Indexposition übernimmt, könnten Sie auf eine Unterabfrage verzichten:

UPDATE test_table
SET    test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE  id = 1;

Könnte sogar etwas schneller sein als meine neue Funktion.
Und beachten Sie, dass die einfachere Version am Ende meiner alten Antwort für Postgres 9.6 funktioniert.