PostgreSQL - 重命名数据库

Pat*_*ins 115 sql postgresql

我需要重命名数据库,但当我在 PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld"其中时,告诉我它不能.

我该怎么做?

(WindowsXP上的8.3版)

更新

  • 第一条错误消息:不能,因为我连接到它.所以我选择了另一个数据库并进行了查询.

  • 我收到第二条错误消息,告诉我它已经来了用户连接.我在PGAdmin屏幕上看到它有很多,PID但它们都处于非活动状态......我不知道如何杀死它们.

bmd*_*cks 173

不要引用数据库名称:

ALTER DATABASE people RENAME TO customers;
Run Code Online (Sandbox Code Playgroud)

还要确保当时没有其他客户端连接到数据库.最后,尝试发布它返回的错误消息,以便我们可以获得更多信息.

  • 如果名称中包含大写字母,则需要引用. (17认同)
  • 情况并非如此,但当名称包含`.`或`@`时也需要引用. (7认同)
  • 当名称包含`-`时也需要引用 (6认同)

gsi*_*ems 79

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

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";
Run Code Online (Sandbox Code Playgroud)

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

  • 它对我有用,thanx!但是pg_stat_activity中的列名是pid而不是procpid.(`x上的PostgreSQL 9.3.5 x86_64-apple-darwin,由i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1编译(基于Apple Inc. build 5658)(LLVM build 2336.9.00),64 -bit`) (3认同)

smo*_*re4 7

我刚碰到这个,下面是有用的:

1)pdAdmin是其中一个会议.请psql改用.
2)pgBouncer在Windows上停止和/或调度程序服务,因为它们也会创建会话