PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie lösche ich eine Tabelle basierend auf der IF-Bedingung in Postgres?

IF kann nicht in SQL verwendet werden, dies gilt nur für PL/pgSQL.

Sie müssen dies mit dynamischem SQL innerhalb eines anonymen PL/pgSQL-Blocks tun. Etwas wie:

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

Wahrscheinlich sollten Sie select erweitern Anweisung zum Verbinden mit pg_namespace und schließen Sie den Schemanamen in Ihre Where-Bedingung ein, um sicherzustellen, dass Sie nicht versehentlich eine Tabelle aus dem falschen Schema löschen.