質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

1197閲覧

特殊文字で作成されてしまったデータベース名のデータベースを削除したい

showkit

総合スコア1638

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/08/31 23:41

PostgreSQL 9.6 を使用しております。
馬鹿な話で、いつ、どの拍子に作成されてしまったか、定かではないのですが・・・。
pg_dumpall で全体をバックアップしようとして気づいたのですが

sql

1pg_dumpall --column-inserts --username=postgres 2" WITH TEMPLATE = template0 OWNER = ユーザ名; 3"atabase name contains a newline or carriage return: "

と pg_dumpall がエラーになるのでデータベースの一覧を見ると

sql

1postgres=# \l 2 データベース一覧 3 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 4-----------+----------+------------------+----------+-------------------+----------------------- 5 \r | ユーザ名 | UTF8 | C | C | 6伏字 7 testdb\r | ユーザ名 | UTF8 | C | C | 8(12) 9

と、改行のみが名前のデータベースと 改行を含む名前を持つデータベースができていることがわかりました。
このデータベースを削除したいのですが、テーブル名をクォートする方法がわかりません。
「\」でのクォートではエラーになります。

sql

1postgres=# drop database \r; 2\コマンドは無効です。? でヘルプを参照してください。

引用符で囲む等もやってみましたがだめでした。
何か、良い方法をご存じの方はいらっしゃいますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

ピンポイントで、おかしな名前のデータベースを削除することが難しそうなので・・・。
以前に 正常な名前の時の pg_dumpall のファイルがありますのでそれと
現在の正常な名前の データベースを pg_dump で取得して

dbinit から やり直すことといたします。

いろいろと、ご回答ありがとうございました。

投稿2020/09/01 04:54

showkit

総合スコア1638

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

リストで\rで表示されているという事なら以下で。

CMD

1drop database "\r"

コマンドに拘らず、pgadmin等のDBツールでGUIで削除するのも一考です。

投稿2020/09/01 01:10

編集2020/09/01 01:13
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

showkit

2020/09/01 01:13

drop database "\r"; は ERROR: database "\r" does not exist になってしまいました。確かに リストには表示されるのですが・・・。
sazi

2020/09/01 01:18

> select * from pg_database where datname='\r' のようにして一致するデータベース名を確認してみて下さい
showkit

2020/09/01 01:24

0 行になります。 pgadmin を検討してみます。
showkit

2020/09/01 01:54

pgadmin を試してみましたが、削除できませんでした。データベース名が異なる と言われました。
sazi

2020/09/01 02:05

右クリックしての削除を行いましたか?
sazi

2020/09/01 02:13 編集

SQLウインドウで行うなら > select * from pg_database で一覧表示し、該当のdatname部分をコピーし、"で括って使うと良いかもしれません。
showkit

2020/09/01 02:51

継続してのフォローありがとうございます。 pgadmin は、右クリックと 一覧表示して チェック → ゴミ箱行き をやってみましたが、残念ながらどちらも エラーになりました。 select * from pg_database の結果の datname も \r と testdb\r でした。
sazi

2020/09/01 03:03

> 右クリックと 一覧表示して チェック → ゴミ箱行き お使いのPGADMINはPGADMIN3ですよね? 手元のPGADMIN3だと 右クリック → 削除/抹消 なのですが?
showkit

2020/09/01 03:33

pgadmin4 というのを使用いたしました。
sazi

2020/09/01 03:45

pgadmin4なら 右クリック → 削除 ですけど?
showkit

2020/09/01 04:51

はい、右クリック → 「Delete/Drop」でした。 それと 一覧表示して チェック → ゴミ箱 と 二通り試してみましたということです。 わかりにくくて、申し訳ありません。
sazi

2020/09/01 05:06 編集

言語は、英語なんですね。 私は日本語(設定から変更可能)で確認しましたので、影響があるかもしれません。 若しくは、不可視のバイナリーデータが含まれているのかもしれません。 コピーして"で括ればSQLで対応できそうですけどね。
showkit

2020/09/01 05:48

なるほど、日本語にできるのですね。一度、やってみます。ありがとうございます。
guest

0

4.1.2. 定数の下り、
とくに文字列定数のあたりをチェックしてみてください。

投稿2020/09/01 00:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

showkit

2020/09/01 01:09

すみません。回答ありがとうございます。そのあたり読んだのではありますが・・・。 drop database E'\r'; も drop database U&'\000d'; も syntax error になるのですが、そういう方法ではないのでしょうか?
退会済みユーザー

退会済みユーザー

2020/09/01 01:10

$$も利かないですか?
showkit

2020/09/01 01:14

drop database $$\r$$; ERROR: syntax error at or near "$$\r$$" 行 1: drop database $$\r$$; になります。勘違いしていたら ごめんなさい・・・。これらの 引用符は カラムの値以外にも効果あるのでしょうか?
sazi

2020/09/01 05:12 編集

$$引用符は文字での括りですから、データベース名の参照には使用できないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問