PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Usuń jedną, nieunikalną wartość z tablicy

Na podstawie mojej starej odpowiedzi na dba.SE, którą znalazłeś i dobrze wykorzystałeś:

Możesz pójść o krok dalej:

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

Ta funkcja przyjmuje wartość elementu do usunięcia jako drugi parametr. Używanie polimorficznego pseudotypu anyelement zgodnie z tym, aby działało to dla każdego typu tablicy.

Następnie UPDATE po prostu jest:

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

db<>fiddle tutaj

Podczas korzystania z mojej oryginalnej funkcji f_array_remove_elem() który przyjmuje pozycję indeksu zamiast wartości elementu, możesz obejść się bez podzapytania:

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

Może być nawet trochę szybsza niż moja nowa funkcja.
I zauważ, że prostsza wersja na dole mojej starej odpowiedzi działa w Postgresie 9.6.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualny stan zarządzania kopiami zapasowymi Open Source dla PostgreSQL

  2. brak wpisu pg_hba.conf dla hosta

  3. Django OneToOneField z możliwym pustym polem

  4. Jak używać pakietu graphql-type-json z GraphQl

  5. Skalowanie PostgreSQL za pomocą puli połączeń i równoważenia obciążenia