PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Masalah dengan kueri penyisipan PostgreSQL

UPDATE di CTE pertama updated menghasilkan tidak ada baris . Artinya, Anda tidak mendapatkan NULL nilai untuk updated.id salah satu. Saat bergabung ke updated , Anda tidak mendapatkan apa-apa , jadi tidak ada INSERT terjadi juga.

Harus bekerja dengan NOT EXISTS :

WITH updated AS (
   UPDATE vote_user_table v
   SET    positive = TRUE       -- use booleann values ..
         ,negative = FALSE      -- .. instead of quoted string literals
   FROM   usuario u
   WHERE  v.review_id = 6       -- guessing origin
   AND    v.user_id = u.id
   AND    u.username ILIKE '[email protected]'
   RETURNING v.id
   )
INSERT INTO vote_user_table (review_id, user_id, positive, negative)
SELECT 6, u.id, TRUE, FALSE
FROM   usuario u
WHERE NOT EXISTS (SELECT 1 FROM updated)
AND    u.username ILIKE '[email protected]';

Sadarilah bahwa masih ada peluang yang sangat kecil untuk kondisi balapan di bawah beban bersamaan yang berat. Detail di bawah pertanyaan terkait ini:
Upsert dengan transaksi




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alat untuk menerjemahkan Oracle PL/SQL ke Postgresql PL/pgSQL

  2. 2 Cara Mengembalikan Baris yang Hanya Mengandung Karakter Alfanumerik di PostgreSQL

  3. Bagaimana cara menghasilkan hash dari hasil yang ditetapkan di Postgress?

  4. Bagaimana cara menambahkan kolom dalam tabel menggunakan migrasi laravel 5 tanpa kehilangan datanya?

  5. Koneksi Psycopg2 db hang pada koneksi jaringan yang hilang