2016-09-05 3 views
0

何らかの理由で壊れているようなデータベースがあります。それはレール用の開発データベースなので、バックアップはありませんが、私は開発を続ける必要があります。私はちょうどそれを落とそうとしたが、それは動作していない。壊れたPostgresデータベースを強制的に削除するにはどうしたらいいですか?

$ dropdb "database-name" 
dropdb: database removal failed: ERROR: could not open file "global/2964": No such file or directory 

ご協力いただきありがとうございます!

+0

トライすくい開発デシベル:drop'はレールのrakeタスクではありません。 – DottedT

+0

'すくい開発デシベルをドロップします。 – HarlemSquirrel

答えて

1

ここでは、「壊れた」データベースよりも間違っています。 PostgreSQLのデータディレクトリに何か問題があります。

global/9264は、のように見え、ALTER DATABASE ... SET ...ALTER ROLE ... SET ...の設定が格納されています。これはデータベース固有ではなく、グローバルテーブルです。

データディレクトリにファイルが見つからない場合は、PostgreSQLのデータディレクトリ全体が破損している可能性があります。何か気になるものがある場合はバックアップし、破損したデータディレクトリの名前を変更または削除し、新しい空白のディレクトリをinitdbにする必要があります。

PostgreSQLがpg_db_role_settingテーブルのファイルを読み込むことができないため、DROPデータベースにアクセスできませんが、そこから削除されたデータベースを参照するエントリを削除する必要があります。これが起こったのかについては


  • をあなたがpostgresql.conffsync = offで実行したことがありますか?

  • SSDストレージはありますか?もしそうなら、最近突然の電力損失がありましたか?

  • PostgreSQLのデータディレクトリ内であらゆる種類の直接修正を行ったことがありますか?

  • 突然削除された可能性のある外部ストレージ上のPostgreSQLデータディレクトリはありますか?

  • postmaster.pidを削除しましたか?

も参照してくださいhttps://wiki.postgresql.org/wiki/Corruption

+0

OK、はい私はSSDストレージを使用していますが、コンピュータが凍結して破損を説明する可能性があります。私は '/ var/lib/postgres/data'から' data.old'にデータベースファイルを移動してinitを試みましたが、その中に。しかし、私はまだ同じエラーが発生しています。多分私のデータベースは別の場所にあると思います。 – HarlemSquirrel

+0

古いファイルを削除してinitを実行した後、 'sudo systemctl restart postgresql'でバックグラウンドサービスを再開しなければならなかったことが分かりました。ご協力ありがとうございました! – HarlemSquirrel

+1

あなたは本当にPostgreSQLを停止し、削除/名前を変更し、initを実行してから、再度起動してください。すべてのファイルを削除している間は実行しないでください。古いpostmasterが新しくinitdbするディレクトリに書き込もうとは思わないでください。また、フリーズ/クラッシュの問題とSSDがある場合は、スーパーキャパシターまたはその他の電力損失保護機能を備えた適度な品質のSSDであることを確認してください。または、良いバックアップを保つ。 –

関連する問題