如何在Postgresql中删除以特定前缀开头的所有数据库

3
在Postgresql中,我有几个以“hdb”前缀开头的数据库。
我想要的是强制删除所有这样的数据库,并终止任何现有的连接。
我尝试了以下方式: Original Answer:最初的回答:
DO
$do$
DECLARE
   _db text;
BEGIN
FOR _db  IN
    SELECT datname FROM pg_stat_activity where datname ilike 'hdb%'
LOOP
    EXECUTE 'REVOKE CONNECT ON DATABASE ' || _db||' FROM public;';
    EXECUTE 'DROP DATABASE ' || _db;

END LOOP;
END
$do$;

但是提示信息显示:

错误:无法从函数或多条命令字符串执行DROP DATABASE

即表示无法在函数或多个命令的字符串中执行DROP DATABASE操作。


2
由于无法使用数据库函数完成此操作,请编写客户端代码。 - Laurenz Albe
1个回答

7
这是我如何使用客户端脚本(Linux)删除测试数据库的方法:

#!/bin/bash

PREFIX='hdb'
export PGPASSWORD=postgres
export PGUSER=postgres
export PGHOST=localhost
export PGPORT=5432

TEST_DB_LIST=$(psql -l | awk '{ print $1 }' | grep '^[a-z]' | grep -v template | grep -v postgres)
for TEST_DB in $TEST_DB_LIST ; do
    if [ $(echo $TEST_DB | sed "s%^$PREFIX%%") != $TEST_DB ]
    then
        echo "Dropping $TEST_DB"
        dropdb --if-exists $TEST_DB
    fi
done

谢谢,但我想让它不依赖于操作系统。 - Pratik
@Pratik 你使用哪种客户端(脚本)语言? - madflow
如前所述,使用PostgreSQL脚本。 - Pratik
1
什么都没变:在数据库函数中无法实现。 - madflow
更多信息,请查看其参考资料 https://copyprogramming.com/howto/how-to-drop-all-databases-starting-with-prefix-in-postgresql - Aida.Mirabadi

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