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

时间:2019-08-19 10:37:54

标签: 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$;

但是,

  

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

1 个答案:

答案 0 :(得分:0)

这是我使用客户端脚本(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