Khi bạn đang nâng cấp một hàng (PostgreSQL> = 9.5) và bạn muốn INSERT có thể giống hệt như CẬP NHẬT có thể, bạn có thể viết nó như sau:
INSERT INTO tablename (id, username, password, level, email)
VALUES (1, 'John', 'qwerty', 5, 'john@mail.com')
ON CONFLICT (id) DO UPDATE SET
id=EXCLUDED.id, username=EXCLUDED.username,
password=EXCLUDED.password, level=EXCLUDED.level,email=EXCLUDED.email
Có cách nào ngắn hơn không? Để chỉ nói: sử dụng tất cả các giá trị EXCLUDE.
Trong SQLite tôi thường làm:
INSERT OR REPLACE INTO tablename (id, user, password, level, email)
VALUES (1, 'John', 'qwerty', 5, 'john@mail.com')
Một tùy chọn khác là sử dụng các cột jsonb và theo cách đó bạn không phải lo lắng về các cột
—
j sẽ vào
INSERT INTO tablename (id, username, password, level, email) VALUES (1, 'John', 'qwerty', 5, 'john@mail.com') ON CONFLICT (id) DO UPDATE SET (username, password, level, email) = (EXCLUDED.username, EXCLUDED.password, EXCLUDED.level, EXCLUDED.email).
Hầu như giống nhau, nhưng dễ dàng để sao chép / dán / quản lý danh sách cột