PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Sự cố với truy vấn nâng cấp PostgreSQL

UPDATE trong CTE updated sản xuất không có hàng . Điều đó có nghĩa là bạn không nhận được NULL giá trị cho updated.id một trong hai. Khi tham gia vào updated , bạn không nhận được gì , vì vậy không có INSERT cũng xảy ra.

Nên làm việc với 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]';

Hãy lưu ý rằng vẫn còn một cơ hội rất nhỏ cho một tình trạng cuộc đua chịu tải nặng đồng thời. Chi tiết trong câu hỏi có liên quan này:
Nâng cấp bằng giao dịch




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kết nối (Py) Spark với cơ sở dữ liệu Postgres bằng JDBC

  2. Không thể kết nối với PostgreSQL Từ xa trên phiên bản Amazon EC2 bằng PgAdmin

  3. Biến toàn cục dựa trên phiên trong thủ tục được lưu trữ Postgresql?

  4. PostgreSQL - Hàm với các biến cục bộ - Tham chiếu cột không rõ ràng

  5. Lời khuyên khóa hoặc NOWAIT để tránh phải chờ các hàng bị khóa?