sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo eliminar una tabla según la condición IF en postgres?

IF no se puede usar en SQL, esto solo es válido para PL/pgSQL.

Debe hacer esto con SQL dinámico dentro de un bloque 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;
$$

Probablemente debería extender el select declaración para unirse contra pg_namespace e incluya el nombre del esquema en su condición where para asegurarse de que no está eliminando accidentalmente una tabla del esquema incorrecto.