|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
добрый день, срочно нужна помощь. есть код, к примеру: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
При INSERT INTO возвращает tab_1_id, а при UPDATE не хочет. Необходимо что-бы в любом случае RETURNING возвращал tab_1_id Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 11:19 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
band-rk, из виза во вне вроде не умеет. Пусть коллеги поправят, если я неправ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 11:27 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
band-rk, c 9.5 появилась конструкция insert .. on conflict update , я думаю намного лучше будет ее использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 11:31 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
Alexius, Я читал доки, но к сожалению нет возможности проопдейтить postgre, поэтому нужно что нить придумать со старым вариантом. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 11:33 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
band-rk, просто склейте два cte: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Есть race condition. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 11:47 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
Melkij, О!, огромное человеческое спасибо, что то не додумался. Все получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 11:56 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
band-rk, к сожалению, корректная реализация upsert в версиях до 9.5 предполагает использование хранимки с циклом внутри (см. пример merge_db в документации ). тут можно почитать, почему не так все просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 12:11 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
Alexius, Спасибо за информацию, в данный момент я реализую как посоветовал Melkij. Но при первой возможности обновлюсь до 9.6 и переделаю запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 12:17 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
Alexiusband-rk, к сожалению, корректная реализация upsert в версиях до 9.5 предполагает использование хранимки с циклом внутри (см. пример merge_db в документации ). тут можно почитать, почему не так все просто. а что, очередь на хеш(ключа) и тейблоид не пройдёт. всегда думал что должно получаться через адвайзори локи . и всегда было лень. -- берем первым селектом виза лок на пару ключ, таблица, и выполняем далее апдейт с котятами . пришедший вторым будет ждать (если такой же конструкции). тонкий момент -- какой снепшот он, этот with cte, будет видеть после разлока очереди. тот с которым взял ресурс ? или не очень . что-то начинаю вспоминать. что что-то такое на ту же тему проверял. результата не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 18:18 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
qwwq, да, с advisory lock'ами вариант я думаю рабочий, но "неаккуратно как-то") не приходилось пока с такой реализацией сталкиваться. снепшот по идее должен быть тот же, с которым лок брался, если это один запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 19:13 |
|
INSERT OR UPDATE
|
|||
---|---|---|---|
#18+
Alexius, advisory lock хотя бы не lock table, как некоторые делают =) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2018, 19:20 |
|
|
start [/forum/topic.php?fid=53&fpage=57&tid=1995863]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 137ms |
0 / 0 |