|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
Ситуация такая Есть сервер PostgreSQL 10. Таблица с pk на колонку id(pk убрать или изменить нельзя) Далее одновременно в эту таблицу пишут несколько клиентов идентичные данные. Значение id приходит от клиента. Клиенты пишут просто с insert into без on conflict do nothing и на это повлиять никак нельзя. Проблема: клиенты падают на нарушении уникальности pk Задача: нужно сделать так, чтобы первый клиент успешно вставил свою запись, а для других все отработало так, словно они вставляли с on conflict do nothing. Сейчас единственный вариант, который видится, это заворачивать запись через вьюшку с правилом на insert. И там уже писать в саму таблицу с on conflict do nothing. Но по определенным причинам это не очень(совсем не) хороший вариант. Повесить триггер на insert и в нем проверить наличие записи в таблице и, если что, возвращать null тоже нехорошо, т.к. клиенты могут попасть совсем одновременно в разных транзакциях и при закрытии транзакции всплывет тот же конфликт(изменить уровень изоляции транзакции со стороны клиента так же нереально). Вот интересует, есть еще какие возможности сделать со стороны сервера игноририрование ошибки? П.с.: клиенту главное успешное завершение транзакции. Что при этом не вставилась ни одна строка ему норм. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 15:12 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
AntipichСейчас единственный вариант, который видится, это заворачивать запись через вьюшку с правилом на insert. И там уже писать в саму таблицу с on conflict do nothing. Но по определенным причинам это не очень(совсем не) хороший вариант. Почему этот вариант не очень? Для вашей задачи по моему есть только два варианта. 1) через вьюшку, 2) через триггер. Исходя из этого надо выстраивать логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 15:57 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
имхо, тут не 1 или 2, а только 1+2 - единственный вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 16:35 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
bdsm_sqlимхо, тут не 1 или 2, а только 1+2 - единственный вариант а плохой потому что тормозной ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 16:36 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
Может правила подойдут? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 16:49 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
jan2aryМожет правила подойдут? неа, там та же хрень, что и с триггером на таблицу - рекурсия.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 17:29 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
Может в триггере на insert pg_try_advisory_lock(pk) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:00 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
fte, В смысле: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:08 |
|
Игнорировать ошибку уникальности pk при записи
|
|||
---|---|---|---|
#18+
ну кстати.. вайнот Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 20:47 |
|
|
start [/forum/topic.php?fid=53&msg=39633810&tid=1995816]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 137ms |
0 / 0 |