当开发人员为我们的后端打开PR时,将通过GitHub操作为PR创建一个来自暂存数据库的新副本。
数据库副本在与暂存数据库相同的SQL示例中创建,所有Postgres都在Google Cloud Platform中。
当PR关闭时,我们会运行另一个GitHub操作来清理资源。
执行的命令是
gcloud sql databases delete ${{ env.TF_VAR_db_name }} -i OurInstance
字符串
问题
未释放数据库。
ERROR: (gcloud.sql.databases.delete)
HTTPError 400: Invalid request: failed to delete database "db-pr-202".
Detail: pq: database "db-pr-202" is being accessed by other users.
(Please use psql client to delete database that is not owned by "cloudsqlsuperuser").
型
问题
如何解决这个问题?(* 不重启示例 *)
What I have tried
终止连接
我尝试用各种方法终止连接,但要么什么都不做,要么我连接到他的示例失败,因为缺少psql
。另一件事是,没有人真正使用数据库。
- name: Terminate DB Connections
run: |
echo "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '${{ env.TF_VAR_db_name }}' AND pid <> pg_backend_pid();" | gcloud sql connect api-db --user=postgres --quiet
型
重启示例
它工作,但它可以影响登台环境,所以我想找到一些其他的解决方案。
1条答案
按热度按时间nx7onnlm1#
您可以修改GitHub操作工作流,以包含尝试强制删除PostgreSQL数据库的步骤。
字符串
强制删除PostgreSQL数据库:
为“postgres”用户设置一个随机密码,这可能会强制断开活动连接。重试数据库删除,允许活动连接关闭一段时间。