powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / serializable transaction in function
6 сообщений из 6, страница 1 из 1
serializable transaction in function
    #33401702
EP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EP
Гость
Здравствуйте!

Что неправильного в следующем куске кода?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
billing=# create or replace function calc(device varchar) returns void as $$
billing$# begin
billing$# start transaction isolation level serializable;
billing$# commit;
billing$# end;
billing$# $$ language plpgsql;
CREATE FUNCTION
billing=# select calc('');
ERROR:  SPI_execute_plan failed executing query "start transaction isolation level serializable": SPI_ERROR_TRANSACTION
CONTEXT:  PL/pgSQL function "calc" line  2  at SQL statement
billing=# 
...
Рейтинг: 0 / 0
serializable transaction in function
    #33402542
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любая функция (любой statement, если быть точнее) уже выполняется в какой-либо транзакции -
либо явной, либо начатой постгрессом (уровень изолированности - по умолчанию).
А вложенных транзакций у постгресса нет.
...
Рейтинг: 0 / 0
serializable transaction in function
    #33402754
EP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EP
Гость
Funny_FalconЛюбая функция (любой statement, если быть точнее) уже выполняется в какой-либо транзакции -
либо явной, либо начатой постгрессом (уровень изолированности - по умолчанию).
А вложенных транзакций у постгресса нет.

А зачем тогда вообще нужны START TRANSACTION / COMMIT, если все, что я выполняю, я выполняю "в какой-либо транзакции - либо явной, либо начатой постгрессом" и вложенную создать не могу?
...
Рейтинг: 0 / 0
serializable transaction in function
    #33402964
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EP А зачем тогда вообще нужны START TRANSACTION / COMMIT, если все, что я выполняю, я выполняю "в какой-либо транзакции - либо явной, либо начатой постгрессом" и вложенную создать не могу?черт, черт, черт.

1. практицки полным аналогом "вложенных транзакций" мсскл в постгре начиная с 8.0, кажецца являются сейвпойнты. (идеология терминологии оракловская - другой взгляд на ту же байду - другие абстракции используемые для описания, но суть та же - есть некие "точки входа во вложенную (по терминологии мсскл) транзакцию, которой нет", но на эти точки возможно откатить транзу (которая в этой терминологии одна))

2. зашлите в постгре в любого клиента _пакет_ SQL инструкций
BEGIN;
...
...
...
..
COMMIT;
при ошибке в пакете или rollback -е он отвалится.

3. Но любая ф-я - это транзакция, и если не использованы (внутри) откаты на сейвпойнты, то она откатывается целиком.
...
Рейтинг: 0 / 0
serializable transaction in function
    #33402998
EP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EP
Гость
Я правильно понял, что внутри функций команды управления транзакциями использовать нельзя? И единственный для меня выход (которым я сейчас и обошелся, но это некрасиво):

Код: plaintext
1.
2.
3.
start transaction isolation level serializable;
select calc('');
commit;
...
Рейтинг: 0 / 0
serializable transaction in function
    #33404718
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменить уровень изоляции в функции нельзя, это да. Но явно начинать/коммитить транзакцию нет необходимости, если default_transaction_isolation заранее установлен в нужный режим.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / serializable transaction in function
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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