我需要写一个脚本来删除PostgreSQL数据库.它可能有很多联系,但脚本应该忽略这一点.

当存在打开的连接时,标准DROP DATABASE db_name查询不起作用.

我怎样才能解决这个问题?

推荐答案

这将删除除您之外的现有连接:

查询pg_stat_activity并获得想要消除的pid值,然后向其发出SELECT pg_terminate_backend(pid int).

PostgreSQL 9.2 and above:

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND pid <> pg_backend_pid();

PostgreSQL 9.1 and below:

SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND procpid <> pg_backend_pid();

一旦断开所有人的连接,就必须断开并从另一个数据库的连接发出DROP DATABASE命令,而不是试图断开的数据库.

注意将procpid列重命名为pid.见this mailing list thread.

Postgresql相关问答推荐

Postgres-pgloader-默认情况下,在PostgreSQL中将列名转换为小写

Postgres将唯一索引添加到已在分区上具有PK的分区表中,然后添加PK

为什么我的应用程序接收的是空值而不是布尔值?

如何在PostgreSQL中更改分区的表空间?

使用正则表达式计算 SQL 查询中 WHERE 过滤器的数量

PostgreSql maintenance_work_mem 在索引创建期间增加

从网址获取第一个字符串

Postgresql:创建默认表空间的视图和使用?

Postgres 根据自己的估计 Select 一个更费时的查询计划

我可以在 Ruby on Rails 上编写 PostgreSQL 函数吗?

Heroku Rails 4 无法连接到服务器:connection refused

如何在 PSQL 中查找从另一个表继承的子表

如何为 JavaEE 应用程序中的 PostgreSQL 热备设置配置连接故障转移?

Select 日期最高的行

获取带有时区偏移的日期

datagrip 无法应用更改 此表是只读的

django.db.utils.IntegrityError:duplicate key value violates unique constraint "django_content_type_pkey"

如何为查询执行设置语句超时

Postgres jsonbNOT contains运算符

postgres - 比较两个数组