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

database – 如何根据postgres中的IF条件删除表?

发布时间:2020-12-13 15:50:49 所属栏目:百科 来源:网络整理
导读:我试图根据条件在启动时删除一个表: IF NOT EXISTS (select * from pg_class where relname = 'mytable' and relpersistence = 'u') DROP TABLE IF EXISTS mytable 结果:’IF’处的语法错误,SQL状态:42601.为什么?如果我不被允许使用IF,我如何根据条件删
我试图根据条件在启动时删除一个表:

IF NOT EXISTS (select * from pg_class where relname = 'mytable' and relpersistence = 'u') 
DROP TABLE IF EXISTS mytable

结果:’IF’处的语法错误,SQL状态:42601.为什么?如果我不被允许使用IF,我如何根据条件删除表格?

解决方法

IF不能在SQL中使用,这仅对PL / pgSQL有效.

您需要在匿名PL / pgSQL块中使用动态SQL执行此操作.就像是:

do
$$
declare
  l_count integer;
begin
  select count(*)
     into l_count
  from pg_class c
    join pg_namespace nsp on c.relnamespace = nsp.oid
  where c.relname = 'mytable' 
    and c.relpersistence = 'u'
    and nsp.nspname = 'public';

  if l_count = 1 then 
    execute 'drop table mytable';
  end if;

end;
$$

您可能应该将select语句扩展为针对pg_namespace加入,并在where条件中包含模式名称,以确保您不会意外地从错误的模式中删除表.

(编辑:李大同)

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

    推荐文章
      热点阅读