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

Pra*_*tik 3 postgresql

在 Postgresql 中,我有几个以hdb前缀开头的数据库。

我正在寻找的是强制删除所有此类数据库,终止现有连接(如果有)。

我尝试了以下方法:

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$;
Run Code Online (Sandbox Code Playgroud)

但这是说,

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

mad*_*low 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
Run Code Online (Sandbox Code Playgroud)