相关疑难解决方法(0)

给定数据库和用户的 search_path 是什么?

我可以看到电流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之前确定它们是什么(相对于)?

postgresql configuration

73
推荐指数
3
解决办法
12万
查看次数

即使函数中止,也会在 UDF 中持久插入

我有一个相当复杂的 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会继续存在。问题:我怎样才能实现这一目标?

postgresql insert transaction plpgsql postgresql-9.4

5
推荐指数
1
解决办法
1076
查看次数