|
|
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
SELECT version(); PostgreSQL 9.4.1, compiled by Visual C++ build 1800, 64-bit все хранимки на языке plpgsql. Можно ли использовать транзакции в хранимках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 10:11 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
crause, Нет. Любая функция исполняется в рамках транзакции вызывающего запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 10:18 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
vyegorov, подскажите как быть в моей ситуации. вся логика в бд, есть узкие места. хранимка 1. begin хранимка2(параметры) -- успешное выполнение insert to table -- c ошибкой -- тут необходимо при ошибке откатить изменения выполнение хранимки 2 end; что можете посоветовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 10:24 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
crauseчто можете посоветоватьполучить на клиенте ошибку и ... в общем-то дальше без разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:19 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
а как быть с откатом изменений. в хранимке 2 вставляются данные в другую таблицу откатить нужно эти изменения, в точности откатить счетчик primary key ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:22 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
crauseа как быть с откатом изменений. в хранимке 2 вставляются данные в другую таблицу откатить нужно эти изменения, в точности откатить счетчик primary key Счётчики(точнее сказать - последовательности) не откатываются! Их можно конечно принудительно установить на заданное значение, но ваши проблемы только обострятся если вы такую логику пропишете в приложение. https://ru.wikipedia.org/wiki/Суррогатный_ключ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:26 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
crause хранимка 1. begin хранимка2(параметры) -- успешное выполнение insert to table -- c ошибкой -- тут необходимо при ошибке откатить изменения выполнение хранимки 2 end; При таком сценарии откатиться транзакция вся, целиком — как вы и хотите. Если нужно избежать этого (т.е. в примере выше нужно, чтобы результат `хранимка2` остался), то оберните ваш INSERT (любой потенциально падающий блок) в BEGIN ... EXCEPTION WHEN ... END; блок. Также можно пользоваться SAVEPOINT-ами . Они просто помечают "точки" в транзакции, до которых нужно откатываться если получено исключение после SAVEPOINT-а. И тот, и другой вариант требуют больших накладных расходов, производительность станет хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:29 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
vyegorov, т.е. даже если я стартану транзакцию на стороне клиента BEGIn TRANSACTION или через SAVE POINT я не смогу вернуть primary key в состояние до ошибки без дополнительных телодвижений с ним? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:34 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
crause, ещё раз говорю, пользуйтесь суррогатными ключами и никогда их не меняйте. Проблем меньше будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:37 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕН, почитал я про сурогатный, но не могу понять как его в моей ситуации использовать на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:41 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
crauseя не смогучто изобретаешь, непрерывную бизнес-нумерацию? так блокируй всю таблицу, бери макс. и не связывай ее с рк, рано илм поздно нумерацию придетчя менять или иметь дубли или ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:44 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
crause, Сплошная нумерация вам тоже не нужна. http://www.audit-it.ru/news/account/657215.html В законодательстве нет требований её соблюдать, а затраты на её реализацию и overhead по производительности перекроют все мнимые преимущества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:45 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
p2.crauseя не смогучто изобретаешь, непрерывную бизнес-нумерацию? так блокируй всю таблицу, бери макс. и не связывай ее с рк, рано илм поздно нумерацию придетчя менять или иметь дубли или ... Эта нумерация прямо для сборника "классика ошибок проектирования информационных систем". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 11:47 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕНp2.пропущено... что изобретаешь, непрерывную бизнес-нумерацию? так блокируй всю таблицу, бери макс. и не связывай ее с рк, рано илм поздно нумерацию придетчя менять или иметь дубли или ... Эта нумерация прямо для сборника "классика ошибок проектирования информационных систем". У меня в биллинге (я в телекоме работаю международном) только некоторые страны страстно желают, чтобы нумерация счетов была непрерывной. Ох и муторное это дело! Но это одно поле, которое не входит в ключи. Когда мне нужно было реализовать что-то подобное (на фрилансе) — непрерывная нумерация в рамках группы, я поступил так: pg_advisory_lock(GROUP, _grp_id), где `GROUP` — просто номер, в виде макроса SELECT coalesce(max(seq_num), 0)+1 INTO _seq FROM tab WHERE group_id=_grp_id INSERT INTO tab (group_id, seq_num, ...) VALUES (_grp_id, _seq, ...); pg_advisory_unlock(GROUP, _grp_id) В целом, я бы пересмотрел вашу модель данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 12:59 |
|
||
|
непонятны хранимки и транзакции в них.
|
|||
|---|---|---|---|
|
#18+
vyegorov, догадываюсь, сам с таким сталкивался. "Штоп без дырок!" А если документ помечается удалённым, то , конечно же - сдвигаем нумерацию остальных, и перепрописываем все ссылки во всех документах(и изменившиеся тоже). И молимся, чтобы всё сработало. В тех странах, наверное, законы кривые, в России, к счастью хоть этого маразма, но всё-таки нет. И это хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 13:21 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39008696&tid=1997875]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 495ms |

| 0 / 0 |
