加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 使用“CREATE … IF NOT EXISTS”时抑制“通知:

发布时间:2020-12-13 16:34:02 所属栏目:百科 来源:网络整理
导读:我有一个函数创建一个临时表来存储和处理数据.问题是我想在单个事务中以1M次的顺序运行此函数,而不需要: NOTICE: relation "foo" already exists,skipping 输出~1M次.有没有一种有效的方法呢? 什么是无效的: 改为放弃桌子 DROP TABLE IF EXISTS 导致共享
我有一个函数创建一个临时表来存储和处理数据.问题是我想在单个事务中以1M次的顺序运行此函数,而不需要:
NOTICE:  relation "foo" already exists,skipping

输出~1M次.有没有一种有效的方法呢?

什么是无效的:

>改为放弃桌子

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;
正如其他人所指出的那样,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’,true)在当前事务结束时重置.

CREATE FUNCTION语句的SET子句仅将设置范围限定为此函数;这听起来像是你最合适的选择.例如:

CREATE FUNCTION f()
  RETURNS void
  SET client_min_messages = error
  LANGUAGE plpgsql
  AS ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读