在外部本地化过程中的事务



关于我之前的帖子,我试图通过设置search_paths来避免模式前缀,但是,我想尽可能地限制范围,所以我这样做:

BEGIN TRANSACTION;
SET LOCAL search_path to mySchema;
CALL STORED_PROCEDURE();
UPDATE TABLE MYTABLE1(//SOME CODE);
COMMIT;
CALL STORED_PROCEDURE();

现在,proc 有自己的开始、提交语句,所以我想知道该过程是否会尊重它的外部事务,即

  1. stored_procedure会尊重其父事务块设置的search_path吗?
  2. 如果更新表失败,在过程中完成的操作是否也会回滚?

PL/pgSQL 程序中的BEGINEND与事务命令BEGINCOMMIT/END无关。他们只是标记一个块。

该过程将使用您的search_path,除非您在过程中覆盖它。 过程内部的COMMIT可能需要特殊考虑,但这在这里不是问题,因为无论如何都不允许在从多语句事务调用的过程中COMMIT

最新更新