删除postgresql数据库报错database xx is being accessed by other users
HDUZN

恢复青岛大学的onlinejudge的数据库的时候,运行删除postgresql数据库命令
dropdb -U onlinejudge onlinejudge时发现报错了。

1
2
dropdb: database removal failed: ERROR:  database "onlinejudge" is being accessed by other users
DETAIL: There are 2 other sessions using the database.

这是因为当前数据库也在被别的用户使用,这里要删除也要慎重,确保数据库是可以被删除的再继续操作。

解决方法:

断开连接到这个数据库上的所有链接,再删除数据库。在PostgreSQL 9.2 及以上版本,执行下面的语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.登录postgres数据库
psql -U onlinejudge
# 列出数据库
# \l or \list

# 2.断开所有连接到这个数据库上的连接,成功可以看到提示2 rows
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='onlinejudge' AND pid<>pg_backend_pid();

# 3.退出postgres
\q

# 再删除原有数据库
dropdb -U onlinejudge onlinejudge

断开所有连接到这个数据库上的连接的语句说明:

pg_terminate_backend:用来终止与数据库的连接的进程id的函数。
pg_stat_activity:是一个系统表,用于存储服务进程的属性和状态。
pg_backend_pid():是一个系统函数,获取附加到当前会话的服务器进程的ID。

  • 本文标题:删除postgresql数据库报错database xx is being accessed by other users
  • 本文作者:HDUZN
  • 创建时间:2022-12-16 22:41:54
  • 本文链接:http://hduzn.cn/2022/12/16/删除postgresql数据库报错database-xx-is-being-accessed-by-other-users/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论