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

Wstaw, jeśli nie istnieje, w przeciwnym razie zwróć identyfikator w postgresql

Tak, jest returning

INSERT INTO tag ("key", "value")
SELECT 'key1', 'value1'
WHERE NOT EXISTS (
    SELECT id, "key", "value"
    FROM node_tag
    WHERE key = 'key1' AND value = 'value1'
    )
returning id, "key", "value"

Aby zwrócić wiersz, jeśli już istnieje

with s as (
    select id, "key", "value"
    from tag
    where key = 'key1' and value = 'value1'
), i as (
    insert into tag ("key", "value")
    select 'key1', 'value1'
    where not exists (select 1 from s)
    returning id, "key", "value"
)
select id, "key", "value"
from i
union all
select id, "key", "value"
from s

Jeśli wiersz nie istnieje, zwróci wstawiony inny, inny istniejący.

BTW, jeśli para „klucz”/„wartość” czyni go unikalnym, to jest to klucz podstawowy i nie ma potrzeby umieszczania kolumny identyfikatora. Chyba że jedna lub obie pary „klucz”/„wartość” mogą mieć wartość NULL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchamianie PostgreSQL tylko w pamięci

  2. Postgres nie działa z „nie można otworzyć pliku mapowania relacji global/pg_filenode.map”

  3. Zliczanie liczby wystąpień podciągu w ciągu w PostgreSQL

  4. Nie udało się załadować modułów sql do klastra bazy danych podczas instalacji PostgreSQL

  5. Jak wdrożyć PostgreSQL w celu zapewnienia wysokiej dostępności