В PostgreSQL вставка на обновление конфликте (вставка) использовать все исключенные значения
когда вы повышаете строку (PostgreSQL >= 9.5), и вы хотите, чтобы возможная вставка была точно такой же, как и возможное обновление, вы можете написать ее так:
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
есть ли более короткий путь? Чтобы просто сказать: используйте все исключающие значения.
в SQLite я раньше делал:
INSERT OR REPLACE INTO tablename (id, user, password, level, email)
VALUES (1, 'John', 'qwerty', 5, 'john@mail.com')
1 ответ:
Postgres не реализовал эквивалент
INSERT OR REPLACE
. ИзON CONFLICT
docs (выделено мной):это может быть либо ничего не делать, либо предложение do UPDATE, указывающее точные детали действия обновления, которое необходимо выполнить в случае конфликта.
хотя это не дает вам стенографию для замены,
ON CONFLICT DO UPDATE
применяется более широко, так как он позволяет устанавливать новые значения на основе уже существующих данных. Для пример:INSERT INTO users (id, level) VALUES (1, 0) ON CONFLICT (id) DO UPDATE SET level = users.level + 1;