- ベストアンサー
Postgresqlのレポート機能について
- Postgresql8.1とAccess2003にて販売管理システムを構築しております。
- サーバーにはA、Bと同じ構成をしたデータベースが存在しています。
- PgAdminからAのテーブルにSQLを実行したところ、エラーが発生しました。再起動後は正常に接続できましたが、レポートでの統計情報は0と表示されます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
あくまで個人の経験からの話です。 記載されている内容から、 「could not receive data from server: Software caused connection abort(0x00002745/10053)」 の時点でPostgreSQLのサービスが落ちて、サーバー自体の再起動時に、PostgreSQLのサービスが 上がって正常復旧。という状況かと思われます。 障害が起きた時に実行したSQL文は、select文でしょうか。 それならば、キャパシティをオーバーする大量行数のクエリが返るSQLでハングすることはありえても DBMS(PostgreSQL本体)や、データベースがぶっ壊れることはまずないと思われます。 また、select文ならばトランザクションの復旧などは不要です。 PostgreSQL8.1は、Windows版でしょうか。 「アーカイブ形式のバックアップだと一部テーブルのレコードが一切復元されない」のは、 はもともとである気がします。 今回の障害以前に、アーカイブ形式のバックアップ&リストアは成功した実績はありますでしょうか。 私は、8.1のWindows版で、アーカイブ形式で上手くいったためしがないので、 これは“使えない機能”と判断し、いつも必ずプレーンテキストでダンプしてました。 全テーブルのレコード数一覧をとる方法ですが、私は、 select count(*) from テーブル1; select count(*) from テーブル2; select count(*) from テーブル3; … とSQL文を羅列したファイル(仮にc:\temp\getcnt.sqlとする)を作り、コマンドラインから、psqlで \o c:\temp\res.txt \i c:\temp\getcnt.sql \q のように、ファイル(この場合、c:\temp\res.txt)に実行結果を書き出して、数えています。 (なお、Windows版の場合、psql を使うときは、 >psql -U postgres <データベース名> のように、ユーザ名(postgres)を指定してpsqlに接続する必要があります。) ご心配でしたら、ためしに別の名前のデータベースを作って、そこにダンプをリストアしてみて、 行数をカウントして本番サーバと同じであれば特に問題ないのではと思います。 過去、PostgreSQL(Linux版)のデータベースがぶっ壊れた状態も経験していますが、 その時は、ダンプ時にエラーが出ました。特定のテーブルに差し掛かった時に 読めないと怒られるという状況でした。 ぶっ壊れた原因はメモリ障害でした。SQL文ごときでデータベースがぶっ壊れるというのは まずありえないのではないかと思います。
お礼
丁寧に回答頂き、有り難うございます。 私が使用しているのは、Linux版の8.1です。 その後、会社のモデムとルーターを再起動すると何事もなかったかのごとく PgAdminにて接続できました。。 いったい何だったんでしょうか。 ちなみに「UPDATE文」で障害が起きました。 (テーブルのカラムの属性を変更するUPDATE文だったと思います。 ただ、アーカイブ形式のダンプはやはり特定のテーブルのみ リストアされませんし、レポートの数値もやはり0のままです。 全テーブルのレコード数確認の方法、早速使わせて頂きます。 大変勉強になりました。 (早く8.4にバージョンアップしたいのですが 使用しているSQL文がそのまま使用できないのでまずはそこから見直しです。。) 本当に有り難うございました。