[英]Postgres - How to drop all tables in a database except for 3
我知道在数据库中删除一个表如下,但是如果我有一个包含十多个表的数据库并且我只需要保留其中的 3 个,我是否可以只用一个命令删除除 3 个之外的所有表?
DROP TABLE IF EXISTS c_note RESTRICT;
是的,但是您需要枚举要删除的所有表。 除了 3 之外,没有其他命令可以删除所有内容。因此,如果您有以下表格:
如果您想删除前三个并保留后三个,您可以使用以下命令:
DROP TABLE foo, bar, baz;
如果您知道所有表都存在,则不需要IF EXISTS
,尽管它不会受到伤害。 也不需要RESTRICT
- 这是默认设置(相反的是CASCADE
,您还可以删除相关对象)。
以下查询将简单地删除所有表但保留您的架构
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.