我有一个档案数据库。我想为它设置一个参数default_transaction_read_only = ON。我有一个删除只读模式的函数。
create or replace procedure tmp_util_archive_set_db_read_only(IN pisreadlonly boolean)
language plpgsql
as
$$
begin
SET default_transaction_read_only to OFF;
if pIsReadlOnly then
ALTER database mpbr SET default_transaction_read_only to ON;
elseif not(pIsReadlOnly) then
set transaction read write;
ALTER database mpbr SET default_transaction_read_only to OFF;
end if;
end
$$;
但是当我调用它时,我得到一个错误
cannot execute ALTER DATABASE in a read-only transaction
是否可以使用函数使数据库脱离只读模式?
do
$$
begin
call tmp_util_archive_set_db_read_only(pisreadlonly := false);
end
$$;
1条答案
按热度按时间xriantvc1#
不,这在函数内部是不可能的。此外,您的尝试存在一个问题,即您正在设置
**default**_transaction_read_only
,它只设置默认值,但不会更改当前事务。您必须设置transaction_read_only
,但这将导致问题是调用该函数的
SELECT
语句已经在当前事务中开始执行,因此更改隔离已经太晚了。你必须在函数调用之外执行: