繁体   English   中英

Postgres - 如何删除数据库中除 3 以外的所有表

[英]Postgres - How to drop all tables in a database except for 3

我知道在数据库中删除一个表如下,但是如果我有一个包含十多个表的数据库并且我只需要保留其中的 3 个,我是否可以只用一个命令删除除 3 个之外的所有表?

DROP TABLE IF EXISTS c_note RESTRICT;

是的,但是您需要枚举要删除的所有表。 除了 3 之外,没有其他命令可以删除所有内容。因此,如果您有以下表格:

  1. 酒吧
  2. 巴兹
  3. 纳夫
  4. 特洛兹

如果您想删除前三个并保留后三个,您可以使用以下命令:

 DROP TABLE foo, bar, baz;

如果您知道所有表都存在,则不需要IF EXISTS ,尽管它不会受到伤害。 也不需要RESTRICT - 这是默认设置(相反的是CASCADE ,您还可以删除相关对象)。

SQL 文档

以下查询将简单地删除所有表但保留您的架构

select 'drop table if exists ' || tablename || ' cascade;' 
    from pg_tables 
    where schemaname = 'public' 

写下一个查询,您可以在其中按名称跳过三个表

select 'drop table if exists ' || tablename || ' cascade;' 
from pg_tables 
where schemaname = 'public' 
and tablename not in (:tbaleNamesToKeep);

我有 192 个表,所以手动写出所有表是不可行的。 我的策略是选择所有表名,删除我想保留的表,然后对其余表运行DROP

1.选择所有表

SELECT tablename FROM pg_tables

当您选择、复制和粘贴结果时,文本应如下所示:

"table1"
"table2"
"table3"
...

2. 删除要保留的表

因此,假设您想保留table2 ,您只需删除该行。

"table1"
"table3"
...

3. 用文本替换添加逗号

"\\n替换为",\\n 为此,我使用regexr.com ,但任何文本编辑器都可以。

"table1",
"table3",
...

4.创建并运行最终的PSQL语句

DROP TABLE
"table1",
"table3",
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM