データベース - postgreSQL - 消せないデータベースの回復 - 概要

クラウディア 
1. 概要

1. 概要

 きっかけは、馬鹿な話なのであります。  ちょっと実験であれこれさわっているうちに、変なデータベースを作成してしまったようなのです。  ある日、「pg_dumpall」しようとしたら・・・。

$ pg_dumpall --column-inserts --username=postgres> pg_dumpall.sql
"atabase name contains a newline or carriage return: "
 いきなり、終わってしまったのだ。  出力した「pg_dumpall.sql」の中を見ても、「CREATE DATABASE」の後、「" WITH TEMPLATE = template0 OWNER = ユーザ名;」で終わっておる。  ふと思いついて、データベースの一覧を見てみたら

postgres=# \l
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+----------+-------------------+-----------------------
 \r        | ........ | UTF8             | C        | C                 |

 ・・・	略	・・・

 template0 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 | postgres=CTc/postgres+
           |          |                  |          |                   | =c/postgres
 testdb\r  | ........ | UTF8             | C        | C                 |
(12 行)
 所有者名は、伏字にしましたが、データベース名に「\r」やら「testdb\r」やら、変な名前のものができておる。  記憶では、ちょっとした確認をしたときに、誤ったような気はする・・・。  あわくって、

drop database '\r';
 とかやってみても

ERROR:  syntax error at or near "'\r'"
行 1: drop database '\r';
                    ^
 とか言われてしまう。  馬鹿な話である、「\r」などの特殊記号をもったデータベースは、作成できても、これを削除することはできないようなのです。  まいったな。  というわけで、これは、この状況を元の状態に復旧する大冒険(いや、そんな大したことではない)の話なのです。  以下、次ページへ続く。