2016-11-04 12 views
0

再び、親切にしてください。私はdbaではなく、古いpostgressデータベースを継承しました。ポストグルcreatedbは関係を開くことができません

私の非常に古代のdebianサーバのひとつが、postgres 7.4.7を実行していて、データファイルシステムを満たしていました。私のコホートの一人が、再インデックスとそれに続く「すべて真空」を試みることに決めました。このすべてが惨めに失敗し、私にはより少ないスペースで私を残しました。私はpostgresのよう「のpsql -h」を実行したときに今、私は

「:FATAL:psqlを開けませんでした関係 『pg_trigger』:そのようなファイルまたはディレクトリ」を取得します。

問題のデータベースにアクセスするためにpsqlを使用できます。私が 'psqlデータベース'の場合、私は'CREATE DATABASE temp;'を実行できますが、 'psql tempは上記のエラーで失敗します。私は有効と思われるものを持っていますpg_dumps。ああ、私は他のサーバに見られるようにpostgresデータベースはありません。私の質問は:上記のエラーを解決する方法はありますか、それは完全にデータベースをリセットする方法はありますか?

私は(私が望むように)ポストグルをアップグレードできないことに注意してください。 私が願っているもの:

  • データは/ var/lib/postgres/data/baseにあります。
  • createdbまたはdropdbを実行すると、致命的なエラーが発生します。
  • それは私のせいではありませんが、今は私の混乱です。
+0

もう1つ。私は日曜日からこの6つの方法でGoogleをやった。私が見つけた最高のものは、ファイルの削除とinitdbの実行です。しかし、私には最良の選択ではないかもしれないという気持ちがあります。しかし、私は何を知っていますか?私はLinuxの管理者です。 –

+0

多分enterprisedbの人々はあなたがデータベースを回復するのに役立ついくつかのツールを持っています。 – McNets

+0

無料購読時間がありました。 – McNets

答えて

0

ああ、私は悪いです、他のサーバー

に見られるような何のPostgresデータベースはありません。

誰かのように聞こえるかもしれませんが(おそらくあなたではない)、DROP TABLE pg_somethingorother;にしようとしました。 pg_テーブル(カタログとも呼ばれる)はテーブル名、トリガコードなどが保持されているため、そのようなテーブルドロップは多くの問題を引き起こします。

上記のエラーを解決する方法はありますか、それとも完全にデータベースをリセットする方法がありますか?

あなたは以前にいくつかの有効なpg_dumpファイルがあると述べました。

  1. これらのダンプファイルをテストします。理想的には、それはディスクスペースを持つマシンを取得することと、適切なポストグルバージョン(7.4.7は古く、これは難しいかもしれないので、これは難しいかもしれません)を発行し、initdbを発行してから、ダンプファイルをロードしますそれはpsql < dumpfileのようなもので、テキストでない場合はpg_loadを使用します)。
  2. ダンプファイルが正常に機能している場合は、元のマシンに戻り、破損したデータベースディレクトリ(/var/lib/postgres/data - baseのディレクトリとconfファイル)を削除します。あなたが将来的にこの問題を持っている可能性が低いですので、手順1
  3. で、データベースに適切なvacuum文を発行するcronを作成したのと同様に、それをロードし、その後、ゼロからスタートする
  4. 使用initdb
  5. 定期的なバックアッププロセスを作成するので、将来この問題(またはその他の問題)が発生する場合は、より確実な方法があります。

ダンプファイルをテストするために十分古いpostgresを持つマシンを取得できない場合は、ダンプファイルを新しいpostgresにロードしてみてください。このは、ほとんどの場合、になります。しかし、それはいくつかの問題に遭遇する可能性があります。それが機能する場合は、手順2以降に進みます。もしうまくいくが、何らかのエラーがあり、何が起きているのか分からなければ、ステップ2以降を実行する価値があるかもしれません。

ダンプファイルにはが含まれていないと、ホースされている可能性があります。しかし、代替案が悲しいので、私は彼らがそうすると仮定するつもりです。

この状況にはごめんねして、私はあなたに幸運を祈ります。

+0

* "Postgresデータベースはテーブル名やトリガコードなどが保存されているので、動作することはほとんどありません" * PostgreSQLの仕組みではありません。このテキストのために[initdb](https://www.postgresql.org/docs/current/static/app-initdb.html)を検索してください: "postgresデータベースは、ユーザ、ユーティリティ、およびサードパーティのアプリケーションで使用するためのデフォルトデータベースです"参照してくださいhttp://stackoverflow.com/a/28261773/562459 –

+0

あなたは絶対に正しいです - 私は 'postgres'データベースとカタログを融合させました。私はそれを反映するために私の答えを更新しました - 私の答えの残りは立っています。 – jmelesky

+0

データベース 'postgres'が存在しないことは完全に正常です。これはPostgreSQL 8.1で導入されました。また、少なくとも7.4.30にデータベースをアップグレードすることが不可欠です。実際には、あなたのデータを失うことを気にしない限り7.4になる理由はありません。 –

関連する問題