sql >> Database teknologi >  >> RDS >> PostgreSQL

Fjern en ikke-unik værdi fra et array

Baseret på mit gamle svar på dba.SE, som du har fundet og brugt:

Du kan tage det et skridt videre:

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

Denne funktion tager værdien af ​​det element, der skal fjernes, som 2. parameter. Brug af den polymorfe pseudo-type anyelement derfor for at få dette til at fungere for enhver array-type.

Derefter UPDATE er simpelthen:

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

db<>fiddle her

Mens jeg bruger min oprindelige funktion f_array_remove_elem() der tager indekspositionen i stedet for elementværdien, kunne du undvære en underforespørgsel:

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

Måske endda en smule hurtigere end min nye funktion.
Og bemærk, at den enklere version nederst i mit gamle svar fungerer for Postgres 9.6.



  1. Skal jeg deaktivere MySQL strict mode?

  2. Handling ikke tilladt efter ResultSet lukket (mysql, java)

  3. Tabelnavn som en PostgreSQL-funktionsparameter

  4. Postgres - konverter enkelt tabel i grupperet JSON-træ