Khi bạn đang upserting một hàng (PostgreSQL> = 9.5), và bạn muốn INSERT có thể chính xác giống như UPDATE có thể, bạn có thể viết nó như thế này :INSRESQL INSERT ON UPDATE CONFLICT (upsert) sử dụng tất cả các giá trị bị loại trừ
INSERT INTO tablename (id, username, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
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 sử dụng để làm:
INSERT OR REPLACE INTO tablename (id, user, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
Không phải là một câu trả lời thật nhưng bạn có thể sử dụng một chút thời gian ngắn ký hiệu: 'INSERT INTO tablename (id, tên người dùng, mật khẩu, mức độ, email) VALUES (1, 'John', 'qwerty', 5 , '[email protected]') TRÊN CONFLICT (id) CẬP NHẬT THIẾT LẬP (tên người dùng, mật khẩu, cấp độ, email) = (EXCLUDED.username, EXCLUDED.password, EXCLUDED.level, EXCLUDED.email) .' Hầu như tương tự, nhưng dễ sao chép/dán/quản lý danh sách cột – foal
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 –