首页 > 解决方案 > 如何登录到 postgresql db - 会话终止后(用于复制数据库)

问题描述

我尝试使用 postgresql 服务器在同一服务器内复制数据库

我尝试了以下查询

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

并得到以下错误

ERROR:  source database "originaldb" is being accessed by 1 other user

所以,我执行了下面的命令

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();

现在我们都无法登录/连接回数据库。

当我提供以下命令时

psql -h 192.xx.xx.x -p 9763 -d originaldb -U postgres

它提示输入密码,输入密码后,它不返回任何响应

我可以理解为什么会这样吗?如何连接到数据库?如何重新启动/使系统让我们重新登录?

有人可以帮助我们吗?

标签: sqldatabasepostgresqlpsqlpgadmin

解决方案


听起来有些东西在共享目录(例如 pg_database)上持有访问排他锁。如果是这种情况,那么在该锁被释放之前,任何人都无法登录。不过,我认为您运行的会话终止代码不会导致这种情况。也许这只是一个巧合。

如果找不到活动会话,可以尝试使用系统工具来找出发生了什么,例如ps -efl|fgrep postgre. 或者,您可以使用通常用于执行此操作的任何方法来重新启动整个数据库实例,例如pg_ctl restart -D <data_directory>sudo service postgresql restart 某些 GUI 方法(如果您在执行此操作的操作系统上)。


推荐阅读