upsert to table, возвращающий id последней записи - PullRequest
0 голосов
/ 14 октября 2019

У меня очень простой упор, я пытаюсь сделать работу, но пока безуспешно.

Рассмотрим таблицу:

CREATE TABLE bla(id TEXT PRIMARY KEY, data INT);

и вставку:

INSERT INTO bla(id, data) VALUES('12wed', 23) RETURNING (id);

И пока все хорошо.

Логика, которую я пытаюсь реализовать, заключается в следующем:

if no record with id=id: 
    insert and return id, 
else:
    do nothing

Я пытался

INSERT INTO bla(id, data) VALUES('12wed', 23) 
RETURNING (id) 
ON CONFLICT(id) DO NOTHING;

Но я получаю следующую ошибку:

ERROR:  syntax error at or near "ON"
LINE 3: ON CONFLICT(id) DO NOTHING;

1 Ответ

3 голосов
/ 14 октября 2019

Вы ошиблись выражением. Правильная версия:

INSERT INTO bla(id, data) VALUES('12wed', 23) 
ON CONFLICT(id) DO NOTHING
RETURNING (id);

Это именно то, что вы хотите:

hh=# INSERT INTO bla(id, data) VALUES('12wed', 23) ON CONFLICT(id) DO NOTHING RETURNING (id);
 id 
----
(0 rows)

INSERT 0 0
hh=# INSERT INTO bla(id, data) VALUES('12wed_new', 23) ON CONFLICT(id) DO NOTHING RETURNING (id);
   id   
--------
 12wed_new
(1 row)

INSERT 0 1

...