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条件にスキーマ名を含めます。