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)のデータベースをおかしくなったデータベースの名前にリネーム
おかしくなったデータベースからダンプしたデータなんて怪しい感じもするが、
バックアップを取っておらず、背に腹は代えられない。