Как удалить 1 таблицу, если в PostgreSQL существует другая таблица, используя IF-операторы

#sql #postgresql #stored-procedures #drop

#sql #postgresql #хранимые процедуры #удалить

Вопрос:

Я пытаюсь написать запрос, который удаляет / удаляет таблицу, если существует другая таблица:

 DO
$do$
BEGIN
   IF  EXISTS (SELECT FROM table1) THEN
      DELETE  FROM table2;
    END IF;
END
$do$;
  

но все, что он делает, это удаляет строки из table1, если table2 существует, а не саму таблицу.

Можете ли вы использовать функцию, аналогичную приведенной выше, или мне следует использовать drop table, если она существует?

Ответ №1:

удалить / удалить таблицу, если существует другая таблица

Это было бы:

 do $$
begin
    if exists(select 1 from information_schema.tables where table_schema = current_schema() and table_name = 'table1') then
    drop table table2;
  end if;
end; $$ language plpgsql;
  

Обоснование:

  • select ввод из таблицы — неправильный способ проверить, существует ли она — если это не так, возникает ошибка. Вместо этого вы можете запросить информационную схему.

  • чтобы удалить таблицу, вы хотите drop table ; delete , с другой стороны, удаляет содержимое таблицы, а не саму таблицу.

Комментарии:

1. да! это работает замечательно, просто нужно добавить кавычки вокруг information_schema и tables! спасибо. мне интересно, что означает 1 после выбора?