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

时间:2019-02-18 10:53:13

标签: postgresql

通常在向现有项目中添加功能时,我会遇到类似(列出数据库的结果)

project_x_001, ..., project_x_00n

我需要通过删除所有以某种特定模式开头的数据库(在这种情况下为project_x _ *

)来清理数据库

在PostgreSQL中,是否有任何优雅的(更清洁的)方法可以做到这一点,

drop database project_x_001, ..., project_x_00n;

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

3 个答案:

答案 0 :(得分:2)

那是不可能的,请参见the documentation

答案 1 :(得分:2)

以下解决方案适用于Ubuntu

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

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

答案 2 :(得分:1)

我需要对@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!