如果 PostgreSQL 中存在另一个 table,如何使用 IF 语句删除 1 table

How to delete 1 table if another table exists in PostgreSQL using IF-statements

我正在尝试编写一个 deletes/drops 一个 table 的查询,如果另一个 table 存在:

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

但是如果 table2 存在而不是 table 本身,它所做的只是从 table1 中删除行。

你可以使用类似于上面的函数吗?如果存在,我应该使用 drop table 吗?

delete/drop a table if another table exists

那就是:

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 从 table 不是检查它是否存在的正确方法 - 如果不存在,则会引发错误。相反,您可以查询信息模式。

  • 删除一个table,你要drop table;另一方面,delete 删除 table 的内容,而不是 table 本身。