Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PG11.5 процедуры и SECURITY INVOKER/DEFINER / 9 сообщений из 9, страница 1 из 1
23.01.2020, 12:12
    #39917796
Alex__kK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
Всем добрый день!

Пытаюсь писать процедуры и столкнулся со странным поведением:

Код: 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.
create or replace procedure development.my_test (a int, b int)
LANGUAGE plpgsql
AS $$
declare
  l_i int;
BEGIN
  l_i := a + b;
  insert into development.parti_1 (c1,c2,c3) values ('1',l_i,'1');
end
$$;

create or replace procedure development.my_test_loop ()
LANGUAGE plpgsql
AS $$
declare
 a int := 1;
BEGIN
  for i in 1..10 loop
    execute 'call development.my_test ($1, $2);' using a, i;
    commit;
  end loop;
end
$$
SECURITY INVOKER;



если процедуру development.my_test_loop делаем как SECURITY INVOKER, то все работает,
если ее делаем как SECURITY DEFINER, то выдает ошибку:
Код: plsql
1.
2.
3.
4.
5.
6.
psql (11.5)
Введите "help", чтобы получить справку.

ddb=# call development.my_test_loop();
ERROR:  invalid transaction termination
КОНТЕКСТ:  PL/pgSQL function development.my_test_loop() line 9 at COMMIT



Вопрос, почему?
...
Рейтинг: 0 / 0
23.01.2020, 12:29
    #39917815
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
А разве можно завершать транзакцию(commit) внутри функции?
...
Рейтинг: 0 / 0
23.01.2020, 12:59
    #39917852
Alex__kK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
Guzya,

Это не функции, это процедуры, в них можно
...
Рейтинг: 0 / 0
23.01.2020, 15:07
    #39917920
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
Alex__kK,

https://postgrespro.ru/docs/postgresql/11/sql-createprocedure В процедуре с характеристикой SECURITY DEFINER не могут выполняться операторы управления транзакциями (например, COMMIT и ROLLBACK в некоторых языках).
...
Рейтинг: 0 / 0
23.01.2020, 15:15
    #39917924
Alex__kK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
Павел Лузанов,
Спасибо за ответ.

В некоторых языках.... То есть PL/PGSQL видимо относятся к этим некоторым языкам... А можно как-то огласить весь список этих некоторых языков?
...
Рейтинг: 0 / 0
23.01.2020, 15:24
    #39917930
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
Alex__kK
Павел Лузанов,
Спасибо за ответ.

В некоторых языках.... То есть PL/PGSQL видимо относятся к этим некоторым языкам... А можно как-то огласить весь список этих некоторых языков?

написано русским по белому:
не могут во всех .
а конкретно обзываемые -- в некоторых.
ещё вопросы ?
...
Рейтинг: 0 / 0
23.01.2020, 15:38
    #39917935
Alex__kK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
qwwq,

Видимо русские языки у всех разные
...
Рейтинг: 0 / 0
23.01.2020, 15:55
    #39917946
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
Павел Лузанов
Alex__kK,

https://postgrespro.ru/docs/postgresql/11/sql-createprocedure В процедуре с характеристикой SECURITY DEFINER не могут выполняться операторы управления транзакциями | ( например, COMMIT и ROLLBACK в некоторых языках ) .

ЧЙДНТ ?
...
Рейтинг: 0 / 0
23.01.2020, 17:02
    #39917999
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PG11.5 процедуры и SECURITY INVOKER/DEFINER
Оговорка в скобках относится к операторам управления транзакциями, которые в некоторых языках могут быть не только COMMIT или ROLLBACK.
Например, даже в языке SQL оператор END TRANSACTION тоже завершает транзакцию. И тоже нельзя использовать в security definer процедурах.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PG11.5 процедуры и SECURITY INVOKER/DEFINER / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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