[英]Delete postgresql database without superuser rights on AWS RDS
I'm trying to delete a postgres database on an AWS RDS service with a bash script.我正在尝试使用 bash 脚本删除 AWS RDS 服务上的 postgres 数据库。 Based on some answers here I came up with this:基于这里的一些答案,我想出了这个:
#!/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}
However I get an error DROP DATABASE cannot run inside a transaction block
.但是我收到一个错误DROP DATABASE cannot run inside a transaction block
。
I understand that I have to terminate all existing connections and not be connected to the database I want to delete.我知道我必须终止所有现有连接,并且不能连接到我要删除的数据库。 What are the proper psql commands to achieve this?实现此目的的正确 psql 命令是什么?
As this is AWS RDS, the superuser rdsadmin
is owned by AWS, so I can't use any solution that needs superuser rights.由于这是 AWS RDS,超级用户rdsadmin
归 AWS 所有,因此我无法使用任何需要超级用户权限的解决方案。
Turns out that as opposed to MySQL you can't do it in one transaction.事实证明,与 MySQL 相比,您不能在一个事务中完成。 This works:这有效:
#!/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}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.