PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come eliminare una tabella in base alla condizione IF in postgres?

IF non può essere utilizzato in SQL, questo è valido solo per PL/pgSQL.

Devi farlo con SQL dinamico all'interno di un blocco PL/pgSQL anonimo. Qualcosa come:

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;
$$

Probabilmente dovresti estendere il select istruzione da unire a pg_namespace e includi il nome dello schema nella tua condizione where per assicurarti di non eliminare accidentalmente una tabella dallo schema sbagliato.