Я пришел из долгой истории с SQL Server и пытаюсь изучить PL / PGSQL.Недавно я обнаружил функцию PG11 CREATE PROCEDURE, которая позволяет выполнять внутренние транзакции внутри их тела.
В качестве учебного упражнения я создал следующее:
DROP PROCEDURE IF EXISTS test_proc();
CREATE PROCEDURE test_proc()
LANGUAGE plpgsql
AS $$
BEGIN
DROP TABLE IF EXISTS a;
CREATE TABLE a (aid int);
COMMIT;
END;
$$;
call test_proc();
Он отлично работает в PSQL, однако, когда я выполняю его в инструменте запросов PGAdmin 4, он выдает ошибку
ОШИБКА: недопустимое завершение транзакции
КОНТЕКСТ: функция PL / pgSQL test_proc () строка 5 в COMMIT
Состояние SQL: 2D000
Может кто-тообъясните пожалуйста что происходит?Я предполагаю, что ПРОЦЕДУРА действительно действительна, и проблема может заключаться в том, что в инструменте запросов неправильно обрабатывается содержащийся COMMIT.
Есть ли какие-либо предложения для решения этой проблемы?
Спасибо!