使用通配符在PostgreSQL中删除多个数据库

3
通常在向现有项目添加功能时,我会遇到类似以下的情况(列出数据库列表的结果)。
project_x_001, ..., project_x_00n

我需要在结束时清理数据库,通过删除所有以特定模式开头的数据库,例如project_x_*。

除了以下方法外,在PostgreSQL中是否有更优雅(更干净)的方法:

drop database project_x_001, ..., project_x_00n;

有时列表太长,您需要每次列出数据库并删除其中一部分。

3个回答

13

以下解决方案适用于Ubuntu

for db in `psql -c '\l' | grep project_x_* | cut -d '|' -f 1`; do psql -c "drop database $db"; done

基本上,以上命令使用grep循环遍历所选数据库;在从数据库中删除任何内容之前,请查看该选择的结果。


1
将此更改为使用 psql -X,以确保它忽略您的 .psqlrc 自定义格式 - 它可能会干扰 grep。 - Steve Chavez

2

我需要对@rachid的回答进行轻微修改,因为我的数据库名称导致了一个无效的语法字符:“ - ”

我的数据库名称非常糟糕,例如testrun-ppsubscriptions-1597745672749-276

所以需要进行修改:

for db in `psql -c '\l' | grep testrun* | cut -d '|' -f 1`; do psql -c "drop database \"$db\" "; done

感谢@rachid!

0

这是不可能的,参见文档


我同意仅使用SQL是不可能的,但我很想知道是否有一种hacky的方法可以实现。 - rachid el kedmiri

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