我有一个函数创建一个临时表来存储和处理数据.问题是我想在单个事务中以1M次的顺序运行此函数,而不需要:
NOTICE: relation "foo" already exists, skipping
Run Code Online (Sandbox Code Playgroud)
输出~1M次.有没有一种有效的方法呢?
什么是无效的:
放弃桌子而不是
DROP TABLE IF EXISTS
Run Code Online (Sandbox Code Playgroud)
捕获duplicate_table异常(效率低于使用IF NOT EXISTS?)
BEGIN
CREATE TEMPORARY TABLE foo () ON COMMIT DROP;
EXCEPTION
WHEN duplicate_table THEN --do nothing
END;
Run Code Online (Sandbox Code Playgroud)Nic*_*nes 12
正如其他人所指出的那样,client_min_messages设置就是你想要的.有很多方法可以配置它.
SET client_min_messages = error或SELECT set_config('client_min_messages', 'error', false)将持续进行当前会话/连接的其余部分.
SET LOCAL client_min_messages = error或SELECT set_config('client_min_messages', 'error', true)在当前交易结束时重置.
该CREATE FUNCTION语句的SET子句将范围设置只对这种功能; 这听起来像是你最合适的选择.例如:
CREATE FUNCTION f()
RETURNS void
SET client_min_messages = error
LANGUAGE plpgsql
AS ...
Run Code Online (Sandbox Code Playgroud)
简单地
SET client_min_messages = error;
Run Code Online (Sandbox Code Playgroud)
在运行语句之前。
也可以在命令行设置psql批量执行
PGOPTIONS="-c client_min_messages=error" psql -f somefile.sql dbname
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2859 次 |
| 最近记录: |