207

I need to rename the database but when I do in PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld" it told me that it cannot.

How can I do it?

(Version 8.3 on WindowsXP)

Update

  • The first error message : Cannot because I was connect to it. So I selected an other database and did the queries.

  • I get a second error message telling me that it has come user connect. I see in the PGAdmin screen that it has many PID but they are inactive... I do not see how to kill them.

6
  • 1
    You could elaborate on why it cannot. I just did it (on a different platform though) and it worked Commented Sep 27, 2008 at 15:03
  • 1
    What is the exact error message and did you look up this error in the postgres docs? Maybe there's a perfect reason for that behaviour. Normally renaming should work. Commented Sep 27, 2008 at 15:05
  • Updated see the question Commented Sep 27, 2008 at 15:06
  • Why not just restarting the database? Commented Sep 27, 2008 at 15:11
  • 1
    What is the exact error message and did you look up this error in the postgres docs? Maybe there's a perfect reason for that behaviour. Normally renaming should work. If you have problems with pending or dead connections just restart the database to get rid of them. Commented Sep 27, 2008 at 15:18

9 Answers 9

291

Try not quoting the database name:

ALTER DATABASE people RENAME TO customers;

Also ensure that there are no other clients connected to the database at the time. Lastly, try posting the error message it returns so we can get a bit more information.

Sign up to request clarification or add additional context in comments.

5 Comments

quoting is required when the name has capital letter in it.
This is not the case, but quoting is also required when the name has a . or @.
Quoting is also required when the name contains a -
The above suggestions make me think it's better to keep table names restricted to just lowercase letters and underscore if possible!
Quoting is also required when the name contains empty space
137

For future reference, you should be able to:

-- 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";

Note that table pg_stat_activity column pid was named as procpid in versions prior to 9.2. So if your PostgreSQL version is lower than 9.2, use procpid instead of pid.

2 Comments

it worked for me, thanx ! but the column name in pg_stat_activity is pid and not procpid. (PostgreSQL 9.3.5 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit)
The force disconnect code is extremely useful and should be in the accepted answer.
11
ALTER DATABASE old_database RENAME TO new_database;

old_database means already existing database. new_database means need to modify this name.

Example: ALTER DATABASE profile RENAME TO address;

Comments

8

I just ran into this and below is what worked:

1) pgAdmin is one of the sessions. Use psql instead.
2) Stop the pgBouncer and/or scheduler services on Windows as these also create sessions

Comments

3

Unexist told me in comment to restart the database and it works! Restarting the database kill all existing connection and then I connect to an other database and was able to rename it with my initial query.

Thx all.

Comments

3

Instead of deploying a nuke (restarting the server) you should try to close those connections that bother you either by finding where are they from and shutting down the client processes or by using the pg_cancel_backend() function.

Comments

3

When connected via pgadmin, the default database will be postgres.

ALTER DATABASE postgres RENAME TO pgnew;

This will not work.

You need to right click on server in pgadmin and set Maintenance DB to some other DB and save. Then retry and it should work if no other connections exists.

Comments

1

For anyone running into this issue using DBeaver and getting an error message like this:

ERROR: database "my_stubborn_db" is being accessed by other users
  Detail: There is 1 other session using the database.

Disconnect your current connection, and reconnect to the same server with a connection that doesn't target the database you are renaming.

Changing the active database is not enough.

Comments

0

from the default postgres db login with admin and then execute ALTER DATABASE old_database RENAME TO new_database; it will work.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.