如何更改数据库名称

时间:2017-07-12 12:23:40

标签: database postgresql

我试图在phppgadmin上更改数据库名称,但我总是收到此错误:

    <script language="js"><![CDATA[
        var myValue = 12;

        // create or update the property
        mc.getEnvironment().getServerContextInformation().addProperty("GlobalProperty",myValue);

        // get the property                     
        var globalProperty = mc.getEnvironment().getServerContextInformation().getProperty("GlobalProperty");

        // provide it's value to your mediation with $ctx:GlobalProperty
        mc.setProperty("GlobalProperty",globalProperty);
    ]]></script>

除了我之外没有人访问过,所以我不理解这个错误。

如何更改数据库名称,或者即使有19个其他会话使用数据库时也强制它?

谢谢

1 个答案:

答案 0 :(得分:0)

可能有一些自动连接。您可以使用以下命令首先终止与数据库的所有连接:

SELECT 
    pg_terminate_backend(pid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

在执行此查询之前,您必须REVOKE CONNECT权限以避免新连接:

REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;

If you're using Postgres 8.4-9.1 use procpid instead of pid

SELECT 
    pg_terminate_backend(procpid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    procpid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

完成上述操作后,尝试重命名数据库。

参考:Kill a postgresql session/connection

<强>更新

为了将来参考,您应该能够:

- 从要重命名的数据库断开连接

\c postgres

- 强制断开所有其他客户端与数据库的重命名

SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

- 重命名数据库(它现在应该没有客户端)

ALTER DATABASE "name of database" RENAME TO "new name of database";

请注意,表pg_stat_activity列pid在9.2之前的版本中被命名为procpid。因此,如果您的PostgreSQL版本低于9.2,请使用procpid而不是pid。

参考:PostgreSQL - Rename database