आपको आंशिक अनुक्रमणिका की आवश्यकता है। कॉलम 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', 'example@sqldat.com'),
('Microsoft', 'example@sqldat.com'),
('Intel','example@sqldat.com');
क्वेरी इस तरह दिखनी चाहिए:
INSERT INTO customers (name, email)
VALUES
('Microsoft', 'example@sqldat.com')
ON CONFLICT (name) WHERE active
DO UPDATE SET email = excluded.email;
SELECT *
FROM customers;
customer_id | name | email | active
-------------+-----------+-----------------------+--------
1 | IBM | example@sqldat.com | t
3 | Intel | example@sqldat.com | t
2 | Microsoft | example@sqldat.com | t
(3 rows)
विशेष रिकॉर्ड के उचित उपयोग पर ध्यान दें excluded. प्रति दस्तावेज: