我知道在数据库中删除一个表如下,但是如果我有一个包含十几个表的数据库而我只需要保留其中的三个,我是否能删除除了3之外的所有表一个命令?
DROP TABLE IF EXISTS c_note RESTRICT;
答案 0 :(得分:3)
是的,但您需要枚举要删除的所有表格。除了3之外,没有命令可以删除所有内容。所以,如果您有以下表格:
你想要删除前三个并保留最后三个,你将使用命令:
DROP TABLE foo, bar, baz;
如果您知道所有表格都存在,则IF EXISTS
不需要RESTRICT
,尽管它不会受到伤害。也不需要CASCADE
- 这是默认值(相反的是{{1}},您也可以删除相关对象。)
答案 1 :(得分:1)
以下查询将简单删除所有表,但保留您的架构
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);
答案 2 :(得分:0)
我有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",
...