删除在AWS RDS上没有超级用户权限的postgresql数据库

删除在AWS RDS上没有超级用户权限的postgresql数据库,postgresql,amazon-rds,Postgresql,Amazon Rds,我正在尝试使用bash脚本删除AWS RDS服务上的postgres数据库。根据这里的一些答案,我得出了以下结论: #!/bin/bash -ex DATABASE="confluence" USER="postgres" export PGPASSWORD="XXX" PORT="5432" HOST="postgres.XXX.eu-central-1.rds.amazonaws.com"

我正在尝试使用bash脚本删除AWS RDS服务上的postgres数据库。根据这里的一些答案,我得出了以下结论:

#!/bin/bash -ex

DATABASE="confluence"
USER="postgres"
export PGPASSWORD="XXX"

PORT="5432"
HOST="postgres.XXX.eu-central-1.rds.amazonaws.com"

echo "drop db"
DROP_DB_COMMAND=$(cat <<EOF
REVOKE CONNECT ON DATABASE ${DATABASE} FROM public;
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = '${DATABASE}';
DROP DATABASE ${DATABASE}
EOF
)

psql \
  --command "${DROP_DB_COMMAND}" \
  --host=${HOST} \
  --port=${PORT} \
  --user=${USER}
#/bin/bash-ex
数据库=“汇流”
USER=“postgres”
导出PGPASSWORD=“XXX”
PORT=“5432”
HOST=“postgres.XXX.eu-central-1.rds.amazonaws.com”
回声“下降db”

DROP_DB_COMMAND=$(cat证明,与MySQL不同,您不能在一个事务中完成此操作。这是有效的:

#!/bin/bash -ex

DATABASE="confluence"
USER="postgres"
export PGPASSWORD="XXX"

PORT="5432"
HOST="postgres.XXX.eu-central-1.rds.amazonaws.com"

echo "terminate connections to db"
TERMINATE_COMMAND=$(cat <<EOF
REVOKE CONNECT ON DATABASE ${DATABASE} FROM public;
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = '${DATABASE}';
EOF
)


psql \
  --command "${TERMINATE_COMMAND}" \
  --host=${HOST} \
  --port=${PORT} \
  --user=${USER}


echo "drop db"
DROP_DB_COMMAND=$(cat <<EOF
DROP DATABASE ${DATABASE};
EOF
)

psql \
  --command "${DROP_DB_COMMAND}" \
  --host=${HOST} \
  --port=${PORT} \
  --user=${USER}
!/bin/bash-ex
数据库=“汇流”
USER=“postgres”
导出PGPASSWORD=“XXX”
PORT=“5432”
HOST=“postgres.XXX.eu-central-1.rds.amazonaws.com”
echo“终止与数据库的连接”

TERMINATE_COMMAND=$(cat不连接到您试图删除的数据库,请使用任何其他数据库。在普通安装中,您会使用
postgres
数据库,但我不知道在RDS上是否可用。最坏的情况是,只需创建一个可用于此目的的空数据库。