как мне вставить много, если он уже существует, ничего не делать с PG-обещанием - PullRequest
0 голосов
/ 23 января 2020

Ошибка: duplicate key value violates unique constraint "users_pkey"

Я использую Node и PG-Promise

Я массово вставляю кучу данных в свою базу данных. Иногда данные уже существуют, поэтому мне нужно либо перезаписать их, либо просто проигнорировать эту строку.

Я видел, что могу сделать это:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    

Но я не могу понять как это сделать с PG-Promise, когда я массово вставляю.

let users = [...]
const query = pgp.helpers.insert(users, userTable)

Как будет выглядеть синтаксис?

1 Ответ

2 голосов
/ 23 января 2020

Согласно https://github.com/vitaly-t/pg-promise/issues/542,

просто добавьте часть ON CONFLICT к вашему запросу, и все.

Так что в ваш случай

const users = […];
const query = pgp.helpers.insert(users, cs) + ' ON DUPLICATE KEY UPDATE';

Где cs - ваш ColumnSet объект. Как правило, вы также будете использовать метод assignColumns , как вы можете видеть по той же ссылке.

Обратите внимание, что правильный синтаксис Postgres INSERT использует ON CONFLICT DO UPDATE … .

...