#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 после выбора?