powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функция в pg11.2 не запускается с уровнем изоляции serializable
5 сообщений из 5, страница 1 из 1
Функция в pg11.2 не запускается с уровнем изоляции serializable
    #39783920
korva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. При определении функции (между LANGUAGE 'plpgsql' и COST 100) указал:
Код: plsql
1.
SET default_transaction_isolation = 'serializable'


(пытался
Код: plsql
1.
transaction_isolation = 'serializable'

, но при запуске скрипта создания функции выдаётся ошибка: ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query, что в принципе логично)

2. В файле /etc/postgresql/11/main/postgresql.conf указал:
default_transaction_isolation = 'serializable'

3. PG-сервер перезапустил

4. Внутри функции дописал контрольку
Код: plsql
1.
INSERT INTO t1(textval) VALUES (current_setting('transaction_isolation'));



5. Вызываю функцию, она отрабатывается.

6. В колонке t1.textval написано: read committed

7. Занавес...

Вопрос - как мне сделать так, чтоб эта треклятая функция вызывалась с уровнем изоляции serializable???

документации рыл, инете искал
...
Рейтинг: 0 / 0
Функция в pg11.2 не запускается с уровнем изоляции serializable
    #39783930
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, надо сразу после начала транзакции указать требуемый уровень изоляции, о чем PG при каждом шаге влево-вправо сообщает?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
postgres=# create function TI () returns varchar as $$ select current_setting('transaction_isolation'); $$ language sql;
CREATE FUNCTION
postgres=# select ti();
       ti       
----------------
 read committed
(1 row)

postgres=# begin transaction;
BEGIN
postgres=# SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET
postgres=# select ti();
      ti      
--------------
 serializable
(1 row)

postgres=# commit;
COMMIT
...
Рейтинг: 0 / 0
Функция в pg11.2 не запускается с уровнем изоляции serializable
    #39783936
korva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander A. Sak,

У меня возможности изменить вызов нет - он осуществляется из другой системы, прогой на Си напрямую к функции.

А зачем тогда строчка в конфигурационном файле? Я в ней указал уровень изоляции по умолчанию - может вы знаете почему pg его игнорирует?
...
Рейтинг: 0 / 0
Функция в pg11.2 не запускается с уровнем изоляции serializable
    #39783950
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил у себя default_transaction_isolation = 'serializable'
Теперь функция без явного указания уровня изоляции стала выдавать serializable . Видать, все-таки не игнорирует. Postgres 10.6 на Ubuntu 18.04 LTS.
Возможно, прога на Си явно устанавливает уровень изоляции.
...
Рейтинг: 0 / 0
Функция в pg11.2 не запускается с уровнем изоляции serializable
    #39783956
korva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander A. Sak,

У меня Debian Stretch и PG11.2. Все проверки я делаю локально из pgcli...

Пока писал про пгклю подумал - а вдруг!
Проверил: и вправду вдруг - в psql всё нормально, в pgcli - 'read commit'

На будущее, мало ли что у кого произойдёт: если есть непонятки с транзакциями - разбираться с ними нужно из штатной psql. Потому что pgcli кладёт болт на настройки транзакций.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функция в pg11.2 не запускается с уровнем изоляции serializable
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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