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