如何在Postgres中删除除少数数据库之外的所有数据库

32
我想删除除了几个数据库以外的所有数据库。 假设有20个数据库,我想删除其中的18个,但保留2个最新的并且正在使用的数据库。
请提供建议。

删除数据库databasename,以便删除您的18个可删除数据库。 - SkyWalker
感谢您的快速回复!我想要一个单一的脚本,只需要提到我想要保留的两个数据库名称。 - ManishD
@user3800715… 当您尝试使用自己选择的脚本语言编写此脚本时,您遇到了什么困难? - Craig Ringer
@CraigRinger 我不确定如何编写此查询的脚本。有人能提供一个适用于Postgres的脚本吗? - ManishD
3个回答

63

首先,在psql终端中执行以下查询。

select 'drop database "'||datname||'";'
from pg_database
where datistemplate=false;

这将为所有数据库生成drop database命令。将结果复制到文本编辑器中,并排除(删除)您想要保留的内容,然后将其保存为dd.sql文件。并像这样执行:

psql -d postgres -f dd.sql

3
可选:psql -d postgres < <( psql -Atc "select 'drop database \"'||datname||'\";' from pg_database where datistemplate=false /* AND add_extra_conditions_here */;")这段代码的作用是在PostgreSQL数据库中删除所有非模板数据库。其中,“add_extra_conditions_here”是可选的额外过滤条件。请注意,这段代码可能会导致未经意的数据丢失,请谨慎使用。 - estani

12

现在您可以从pgAdmin上选择数据库属性,选择要删除的数据库并点击删除。 快速简单! 删除选定的数据库: 删除选定的数据库


5

正如最佳答案所展示的那样,对于我来说,删除多个数据库特别麻烦,因此我编写了一个帮助程序脚本来减轻这个操作:https://github.com/Kraymer/ezdropdb

简而言之,您输入要删除的数据库必须匹配的模式,然后列出所有数据库名称的结果,并在最后提示您输入要删除哪些(请参见项目页面上的屏幕截图)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接