2

Linux がインストールされた Azure VM に postgresql DB があります。というファイルから特定のバックアップを復元する必要がありますlatest.dump。このファイルを にコピーして実行し/home/myuserましたpsql mydb < latest.dump

多くの意味不明なことが画面に出力されました。

ERROR:  invalid byte sequence for encoding "UTF8": 0xb3
invalid command \Jg�~J&�:�Qr�Ɩ����q���^�[1�����q)���G���҆C�|�
ERROR:  invalid byte sequence for encoding "UTF8": 0xb5
invalid command \mJ�q����>�^�R����
invalid command \R
                  ܡI$�)�a�;���wg7Ei�}R%�Q����h&ஓ�L��܆��(
invalid command \I����3M��e�2Q�?/X������`+=|Y[``+��:��r
invalid command \�^c�v��rR

終了すると、コマンド プロンプトに事前に入力された次の文字列が残ります。

62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c

Enter キーを押しても、多くのcommand not foundエラーが発生するだけです。

最も不可解なことに、新しいファイルが表示されました/home/myuser(つまり、latest.dump保持されているのと同じレベル)。それは奇妙な名前を持ってい???2@ؾ>?yqus????>I?[ޏI??i?Ďます。

しようとするとsudo rm ???2@ؾ>?yqus????>I?[ޏI??i?Ď、 になりrm: cannot remove ‘???2@ؾ’: No such file or directoryます。そして、lsもう一度実行すると、 /home/myuser にと以外の2 つの新しいファイルが表示されます。これらの新しいファイルはと. この 2 つを削除することはできますが、削除することはできません。新しく作成された 2 つのファイルの名前が、元のファイルのファイル名の一部になっていることに気付きました (よく見ると、2 つのファイルは で区切られているように見えます)。latest.dump???2@ؾ>?yqus????>I?[ޏI??i?Ď?yqus????I?[ޏI??i?Ď???2@ؾ>?yqus????>I?[ޏI??i?Ď>

ちなみに、postgres DB にログインして、復元が機能したかどうかを確認しました。そうではなく、データが入力されておらず、psql mydb < latest.dump本質的に失敗しました。

ここで一体何が起こっているのか、これらの新しく作成された誤ったファイルを削除するにはどうすればよいですか?


内部latest.dumpでは、次のような SQL が表示されます。

^@^@^@^@^@^A^A^@^@^@^@^F^@^@^@public^A^A^@^@^@^@^N^@^@^@uauvuro0s8b9v4^@^E^@^@^@false^@^C^@^@^@246^A^A^@^@^@^C^@^@^@^@^@^@^@^@^@ñ^@^@^@^@^@^@^@^@^@^D^@^@^@1259^@^E^@^@^@44416^@^R^@^@^@links_grouptraffic^@^E^@^@^@TABLE^@^B^@^@^@^@±^@^@^@CREATE TABLE links_grouptraffic (
    id integer NOT NULL,
    visitor_id integer NOT NULL,
    which_group_id integer NOT NULL,
    "time" timestamp with time zone NOT NULL
);

そして、次のような「意味不明」なデータがたくさんあります。

¿f ^?zQUò}ÛMpá#"        ^]äR¡g¤^E ¼å<9a>ÓÍ@î<98>,£+DØñW[^Mw<8f>Ív<9d>ñItâduM§[/úµ<8c>ÏVgý[D^W3^N^Z0<91>Õ]'/ݸ1<8c>Ã^T°<8b>ªÈw42Á<87>Ç@o#Ñ<99>á<9c>¹=^@/áÙ¢<8c>´M Sç<90>|<æÇ<9d><93>¥<9a>NÜ©^CáxuXÜî¬<89>Ü^NÙo<8c>ð³°^O§ p¸ñÌÔ3}+^Oâr<3M¾<9b>t<80>^D<84>A^CÈ<89>kå^^H±yò ­T^Bíâ"º d<85><85><88>o<89><80>±³^C¥Ä9½^V^W4<81>æ¨ïo^YO[(æÃù^M^RÁ<9e>Ò<8e>Ô§k=ý<87>vGõº><83>^Q^DÅ>Û<~¡Ô+í

注:必要に応じて詳細をお尋ねください

4

1 に答える 1

1

まず、ファイルを削除します。rm "filename" を使用してみてください (つまり、ファイル名を引用符で囲みます)。それがうまくいかない場合?、ファイル名の はおそらく他の文字です。その i ノードを使用して削除することもできます。ls -lii ノード番号 (左側) を書き留めます。次に、コマンドを実行するだけfind . -inum <inode-number> -exec rm -i {} \;です。それは問題番号1を取り除くはずです。

次に、使用しないことをお勧めしpsql mydb < latest.dumpます。代わりに pg_restore を次のように使用しますpg_restore latest.dump -d mydb -U myuser。技術的には、それがあなたにとって正しい方法です。さらにエラーが発生する場合がありますが、現在表示されているものとは関係ありません (無視できる場合もあります)。latest.dumpテキストファイルではなく、おそらくバイナリファイルです。幸運を!

于 2015-12-25T15:12:36.907 に答える