powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / непонятны хранимки и транзакции в них.
16 сообщений из 16, страница 1 из 1
непонятны хранимки и транзакции в них.
    #39008577
crause
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT version();
PostgreSQL 9.4.1, compiled by Visual C++ build 1800, 64-bit

все хранимки на языке plpgsql.

Можно ли использовать транзакции в хранимках?
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008589
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crause,

Нет. Любая функция исполняется в рамках транзакции вызывающего запроса.
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008597
crause
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

подскажите как быть в моей ситуации.
вся логика в бд, есть узкие места.

хранимка 1.
begin
хранимка2(параметры) -- успешное выполнение
insert to table -- c ошибкой
-- тут необходимо при ошибке откатить изменения выполнение хранимки 2
end;

что можете посоветовать
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008656
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crauseчто можете посоветоватьполучить на клиенте ошибку и ... в общем-то дальше без разницы.
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008661
crause
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как быть с откатом изменений.
в хранимке 2 вставляются данные в другую таблицу
откатить нужно эти изменения, в точности откатить счетчик primary key
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008669
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crauseа как быть с откатом изменений.
в хранимке 2 вставляются данные в другую таблицу
откатить нужно эти изменения, в точности откатить счетчик primary key
Счётчики(точнее сказать - последовательности) не откатываются!
Их можно конечно принудительно установить на заданное значение,
но ваши проблемы только обострятся если вы такую логику пропишете в приложение.
https://ru.wikipedia.org/wiki/Суррогатный_ключ
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008673
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crause
хранимка 1.
begin
хранимка2(параметры) -- успешное выполнение
insert to table -- c ошибкой
-- тут необходимо при ошибке откатить изменения выполнение хранимки 2
end;
При таком сценарии откатиться транзакция вся, целиком — как вы и хотите.

Если нужно избежать этого (т.е. в примере выше нужно, чтобы результат `хранимка2` остался),
то оберните ваш INSERT (любой потенциально падающий блок) в BEGIN ... EXCEPTION WHEN ... END; блок.

Также можно пользоваться SAVEPOINT-ами .
Они просто помечают "точки" в транзакции, до которых нужно откатываться если получено исключение после SAVEPOINT-а.

И тот, и другой вариант требуют больших накладных расходов, производительность станет хуже.
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008680
crause
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

т.е. даже если я стартану транзакцию на стороне клиента BEGIn TRANSACTION
или через SAVE POINT
я не смогу вернуть primary key в состояние до ошибки без дополнительных телодвижений с ним?
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008685
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crause,
ещё раз говорю, пользуйтесь суррогатными ключами и никогда их не меняйте.
Проблем меньше будет
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008689
crause
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

почитал я про сурогатный, но не могу понять как его в моей ситуации использовать на практике.
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008693
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crauseя не смогучто изобретаешь, непрерывную бизнес-нумерацию? так блокируй всю таблицу, бери макс. и не связывай ее с рк, рано илм поздно нумерацию придетчя менять или иметь дубли или ...
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008696
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crause,
Сплошная нумерация вам тоже не нужна.
http://www.audit-it.ru/news/account/657215.html
В законодательстве нет требований её соблюдать,
а затраты на её реализацию и overhead по производительности перекроют
все мнимые преимущества.
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008698
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.crauseя не смогучто изобретаешь, непрерывную бизнес-нумерацию? так блокируй всю таблицу, бери макс. и не связывай ее с рк, рано илм поздно нумерацию придетчя менять или иметь дубли или ...
Эта нумерация прямо для сборника "классика ошибок проектирования информационных систем".
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008773
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН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)

В целом, я бы пересмотрел вашу модель данных.
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008810
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,
догадываюсь, сам с таким сталкивался. "Штоп без дырок!"
А если документ помечается удалённым, то , конечно же - сдвигаем нумерацию остальных,
и перепрописываем все ссылки во всех документах(и изменившиеся тоже).
И молимся, чтобы всё сработало.
В тех странах, наверное, законы кривые, в России, к счастью хоть этого маразма, но всё-таки нет. И это хорошо.
...
Рейтинг: 0 / 0
непонятны хранимки и транзакции в них.
    #39008934
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

Это EC (немцы, австрийцы). Вроде больше не напрягают с этим. Либо же саппорт научился "выкручиваться" без админов.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / непонятны хранимки и транзакции в них.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]