我想创建一个仅包含现有数据库结构的副本,而不将数据发送到新数据库(同一服务器)。
我使用的是PHP 5.2.14
我试过了:
CREATE DATABASE base3 WITH TEMPLATE base2 OWNER postgres;
得到了这个错误:
错误:其他用户正在访问源数据库“base2” **********错误********** 错误:其他用户正在访问源数据库“base2” SQL状态:55006
我尝试添加此代码:
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'base2' AND procpid <> pg_backend_pid();
并收到此错误:
错误:函数pg_terminate_backend(整数)不存在 第1行:SELECT pg_terminate_backend(pg_stat_activity.procpid)FROM p ... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 **********错误**********
错误:函数pg_terminate_backend(整数)不存在 SQL状态:42883 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 性格:8
谢谢你的帮助。
答案 0 :(得分:2)
在PostgreSQL 9.2及更高版本中,您应该使用带有整数参数的pg_terminate_backend
并使用pid
字段。示例:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'base2' AND pid <> pg_backend_pid();
pg_cancel_backend和pg_terminate_backend分别向进程ID标识的后端进程发送信号(分别为SIGINT或SIGTERM)。可以在pg_stat_activity视图的pid列中找到活动后端的进程ID,也可以在服务器上列出postgres进程(在Unix上使用ps或在Windows上使用任务管理器)。可以从pg_stat_activity视图的usename列找到活动后端的角色。
答案 1 :(得分:0)
pg_stat_activity
在版本8.4和自己的版本中可用。
在文档页面上列出
https://www.postgresql.org/docs/8.1/static/functions-admin.html