PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como descartar uma tabela com base na condição IF no postgres?


IF não pode ser usado em SQL, isso só é válido para PL/pgSQL.

Você precisa fazer isso com SQL dinâmico dentro de um bloco PL/pgSQL anônimo. Algo como:
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;
$$

Você provavelmente deve estender o select instrução para unir em pg_namespace e inclua o nome do esquema em sua condição where para certificar-se de que você não está descartando acidentalmente uma tabela do esquema errado.