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条件中包含模式名称,以确保您不会意外地从错误的模式中删除表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |