我可以看到电流search_path
:
show search_path ;
Run Code Online (Sandbox Code Playgroud)
我可以search_path
为当前会话设置:
set search_path = "$user", public, postgis;
Run Code Online (Sandbox Code Playgroud)
同样,我可以search_path
为给定的数据库永久设置:
alter database mydb set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令永久设置search_path
给定角色(用户):
alter role johnny set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
但我想知道如何在更改数据库和角色设置search_path
之前确定它们是什么(相对于)?
我有一个相当复杂的 UDF(在一堆表中移动并创建一堆新表),其中可能会发生多次中止。在每次操作之前,我想记录操作发生的时间和查询本身。UDF 如下所示:
log function_start
log sql1
execute sql1
log sql2
execute sql2
...
log sqlN
execute sqlN
log function_end
Run Code Online (Sandbox Code Playgroud)
每条日志语句都意味着向下表中插入一条新记录:
CREATE TABLE backup_logs
(
id serial NOT NULL,
t timestamp with time zone default now(),
sql text,
CONSTRAINT backup_logs_pkey PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
如果发生中止,我希望sql1, sql2, ... sqlN
回滚,但inserto into backup_logs
会继续存在。问题:我怎样才能实现这一目标?