PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL Upsert WHERE क्लॉज के साथ

आपको आंशिक अनुक्रमणिका की आवश्यकता है। कॉलम name . पर uniqe बाधा छोड़ें और कॉलम पर आंशिक इंडेक्स बनाएं:

CREATE TABLE customers (
    customer_id serial PRIMARY KEY,
    name VARCHAR,
    email VARCHAR NOT NULL,
    active bool NOT NULL DEFAULT TRUE
);

CREATE UNIQUE INDEX ON customers (name) WHERE active;

INSERT INTO customers (NAME, email) VALUES
 ('IBM', '[email protected]'),
 ('Microsoft', '[email protected]'),
 ('Intel','[email protected]');

क्वेरी इस तरह दिखनी चाहिए:

INSERT INTO customers (name, email)
VALUES
    ('Microsoft', '[email protected]') 
ON CONFLICT (name) WHERE active
DO UPDATE SET email = excluded.email;

SELECT *
FROM customers;

 customer_id |   name    |         email         | active 
-------------+-----------+-----------------------+--------
           1 | IBM       | [email protected]       | t
           3 | Intel     | [email protected]     | t
           2 | Microsoft | [email protected] | t
(3 rows)    

विशेष रिकॉर्ड के उचित उपयोग पर ध्यान दें excluded. प्रति दस्तावेज:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL श्रृंखला को गलत तरीके से क्यों संयोजित करता है?

  2. पोस्टग्रेज फ़ंक्शन

  3. दो तालिकाओं में कैसे शामिल हों, उनमें से एक में प्राथमिक कुंजी नहीं है और समान वर्ण लंबाई नहीं है

  4. PostgreSQL में ऑर्डिनल नंबर कैसे बनाएं

  5. Postgresql में सलाहकार ताले पर समयबाह्य