如何杀死所有postgresql连接?
我正在尝试rake db:drop但是我得到了:
ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
Run Code Online (Sandbox Code Playgroud)
我已经尝试关闭我从a看到的进程,ps -ef | grep postgres但这也不起作用:
kill: kill 2358 failed: operation not permitted
Run Code Online (Sandbox Code Playgroud) 1 S postgres 5038 876 0 80 0 - 11962 sk_wai 09:57 ? 00:00:00 postgres: postgres my_app ::1(45035) idle
1 S postgres 9796 876 0 80 0 - 11964 sk_wai 11:01 ? 00:00:00 postgres: postgres my_app ::1(43084) idle
Run Code Online (Sandbox Code Playgroud)
我看到了很多.我们正在尝试修复连接泄漏.但与此同时,我们希望为这些空闲连接设置超时,最长可达5分钟.
我在PostgreSQL中有一个脚本,每晚都会从转储中恢复测试数据库.应用程序服务器和具有连接池的进程可以访问数据库,从而始终保持一些连接处于活动状态.
所以脚本恢复转储my_temp_database.那么它应该改名my_database来my_old_database,my_temp_database来my_database,并最终下降my_old_database.
如何断开所有客户端,超级用户与否my_database,以便可以重命名?我怎么能暂时阻止他们重新连接?
有没有更好的方法来做我需要的?
我要寻找一个基本的脚本/命令,将创建一个实时数据库的副本(让他们的名字mydb和mydb_test,都在同一台服务器上).
要求
mydb_test已经存在并且有记录mydb并且mydb_test确实存在连接,它也必须工作提示:
drop database 如果您有现有连接,则无法使用我尝试使用以下命令连接到数据库服务器:
psql -h host_ip -d db_name -U user_name --password
Run Code Online (Sandbox Code Playgroud)
它显示以下行并拒绝连接.
psql: FATAL: too many connections for role "user_name".
Run Code Online (Sandbox Code Playgroud)
如何关闭活动连接?
我没有数据库的管理员权限.我只是一个普通用户.
我正在尝试使用 sqlalchemy 删除我的数据库:
def dropDb(self, dbName):
self.closeConnection()
self.selectDb(None)
self.execute("drop database %s" % dbName)
def closeConnection(self):
self._Session.close_all()
self._engine.dispose()
del self._Session
del self._engine
Run Code Online (Sandbox Code Playgroud)
我用以下方法创建引擎:
sqlalchemy.create_engine(connection_string, poolclass = NullPool)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
详细 ProgrammingError: (ProgrammingError) ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]无法删除数据库“test_db”,因为它当前正在使用中。(3702) (SQLExecDirectW)') '删除数据库 test_db'()
如何强制关闭所有连接?
我正在像这样的代码(简化)中运行事务查询:
try {
runQuery("begin");
runQuery("some query ...");
runQuery("some other query ...");
runQuery("some more query ...");
runQuery("some extra query ...");
runQuery("commit");
} catch (e){
runQuery("rollback");
}
Run Code Online (Sandbox Code Playgroud)
这是来自postgres日志文件的语句列表。
请注意,第一次开始/提交工作正常,第二次提交给出了主题中提到的错误:
2015-02-18 20:19:17 UTC [6459-7] vdsr@sails LOG: statement: begin
2015-02-18 20:19:17 UTC [6459-8] vdsr@sails LOG: execute <unnamed>: INSERT INTO "groups" ("name", "parentGroupRef", "isCompany", "companyRef", "createdAt", "updatedAt") values ($1, $2, $3, $4, $5, $6) RETURNING *
2015-02-18 20:19:17 UTC [6459-9] vdsr@sails DETAIL: parameters: $1 = 'testclient', $2 = '5', $3 = 't', $4 = '1', …Run Code Online (Sandbox Code Playgroud) postgresql ×6
commit ×1
connection ×1
database ×1
logging ×1
psql ×1
python ×1
sql ×1
sqlalchemy ×1
templates ×1
transactions ×1