PostgreSql数据库的副本结构没有数据

时间:2015-09-27 20:53:15

标签: php postgresql

我想创建一个仅包含现有数据库结构的副本,而不将数据发送到新数据库(同一服务器)。

我使用的是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

谢谢你的帮助。

2 个答案:

答案 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();

Server Signaling Functions

  

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和自己的版本中可用。

旧版本用户可以使用这些功能 enter image description here

在文档页面上列出

https://www.postgresql.org/docs/8.1/static/functions-admin.html