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

Usuwanie elementu z tablicy w obiekcie JSONB

USUŃ działa na rzędach tabeli. Dlatego nie możesz go użyć, chyba że chcesz usunąć cały wiersz.

Spróbuj tego:

create temp table testing as
select 
    '{ "playersContainer": {
        "players": [
            {
                "id": "1",
                "name": "Nick"
            },
            {
                "id": "2",
                "name": "Rick"
            },
            {
                "id": "3",
                "name": "Trick"
            }
        ]
     }}'::jsonb as value;

Teraz musisz znaleźć pozycję gracza, którego chcesz usunąć, powiedzmy, że chcesz Rick z id 2 (minus 1, ponieważ indeks zaczyna się od 0)

select position-1 from testing, jsonb_array_elements(value->'playersContainer'->'players') with ordinality arr(elem, position) WHERE elem->>'id' = '2';

Teraz możesz połączyć to z UPDATE oświadczenie o aktualizacji pola. Użyj operatora minus (-), aby usunąć element w żądanym indeksie.

UPDATE testing SET value = jsonb_set(value, '{playersContainer,players}', (value->'playersContainer'->'players') - (select position-1 from testing, jsonb_array_elements(value->'playersContainer'->'players') with ordinality arr(elem, position) WHERE elem->>'id' = '2')::int );

Wynik końcowy:

{
    "playersContainer":{
        "players":[
            {
                "id":"1",
                "name":"Nick"
            },
            {
                "id":"3",
                "name":"Trick"
            }
        ]
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można połączyć się z bazą danych Amazon PostgreSQL RDS na R przy użyciu RPostgreSQL

  2. Jak wdrożyć PostgreSQL na DigitalOcean

  3. Sprawianie, że `grupuj według` daje wiele kolumn

  4. Problem z tworzeniem Postgres RDS w szablonie Cloudformation

  5. Jak zresetować sekwencję dla identyfikatorów w tabelach PostgreSQL