我有一个函数可以创建一个临时表来存储和处理数据。问题是我想在单个事务中以1M次的顺序运行此函数,而不需要:
NOTICE: relation "foo" already exists, skipping
输出~120次。有没有一种有效的方法呢?
什么效率不高:
取而代之的是
DROP TABLE IF EXISTS
捕获duplicate_table异常(效率低于使用IF NOT EXISTS?)
BEGIN
CREATE TEMPORARY TABLE foo () ON COMMIT DROP;
EXCEPTION
WHEN duplicate_table THEN --do nothing
END;
答案 0 :(得分:11)
正如其他人所指出的那样,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 ...
答案 1 :(得分:4)
简单地
SET client_min_messages = error;
在运行语句之前。
您也可以在psql
命令行上设置批处理执行
PGOPTIONS="-c client_min_messages=error" psql -f somefile.sql dbname