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

Postgres 9.5 ON KONFLIKT WYBIERZ

Możesz użyć CTE:

WITH cte AS (
   INSERT INTO "user"(timestamp, user_id, member_id)
   values ($1, $2, $3)
   ON CONFLICT (user_id, member_id) DO NOTHING
   RETURNING user_id
)
SELECT NULL AS result
WHERE EXISTS (SELECT 1 FROM cte)          -- success
UNION ALL
SELECT id 
FROM "user" 
WHERE user_id = $2 
  AND NOT EXISTS (SELECT 1 FROM cte);     -- conflict

Demo DBFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pobrać poszczególne kolumny z tabeli zwróconej z funkcji?

  2. Nowy sposób na spersonalizowanie monitorowania PostgreSQL za pomocą Prometheusa

  3. Sprawdź, czy w tablicy Postgres istnieje NULL

  4. Multi-DC PostgreSQL:konfigurowanie węzła gotowości w innej lokalizacji geograficznej za pośrednictwem sieci VPN

  5. Czy można policzyć wszystkie wiersze o tym samym identyfikatorze za pomocą COUNT?