データベースの名前を変更してみた - PostgreSQL

ALTER DATABASE でできる。

ALTER DATABASE hoge_db RENAME TO foo_db;

リネーム対象のデータベースに接続しているとダメと言われる。

hoge_db=# ALTER DATABASE hoge_db RENAME TO hoge_db_bak;
ERROR:  current database may not be renamed

リネーム対象以外のデータベースに接続して操作を行う。
template1 でいいと思う。

[dareka@dokka ~]$ psql template1
Welcome to psql 8.1.11, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

template1=# ALTER DATABASE hoge_db RENAME TO hoge_db_kowareta;
ALTER DATABASE
template1=# ALTER DATABASE hoge_db_new RENAME TO hoge_db;
ALTER DATABASE
template1=# \q


なんでリネームが必要になったか。

とあるデータベースのとあるテーブルにINSERTすると
Postgresのプロセスが異常終了する状況になってしまった。
不整合が起きているっぽいので、現状のデータを引き継ぎ
データベースを作り直すことにした。

(1) おかしくなったデータベースのダンプを取る
(2) 別名で新しいデータベースを作成する
(3) (2)のデータベースにダンプを流し込む
(4) (2)のデータベースの問題のテーブルにINSERTしてみる
(5) おかしくなったデータベースをリネームして取っておく
(6) (2)のデータベースをおかしくなったデータベースの名前にリネーム

おかしくなったデータベースからダンプしたデータなんて怪しい感じもするが、
バックアップを取っておらず、背に腹は代えられない。