web-dev-qa-db-ja.com

大量のデータをPostgreSQLデータベースにインポートする

PostgreSQLサーバーに(サーバー上の複数のデータベースにまたがって)大量のデータをインポートしています。

最後にデータをインポートしようとしたとき、/ var/log/postgresに60G以上のファイルが含まれていたため、マシンが効果的に「クラッシュ」しました(Ubuntu 10.0.4)(そして、私は約半分しかいませんでした)インポートの方法)。

ログファイルの目的がわかりません(ACID準拠などである必要があると思います)。しかし、大量のデータのインポート中に生成されるログファイルのサイズを削減する方法があるかどうか知りたいのですが。

/var/log/postgresのログファイルは、情報のみ(標準インストールの場合)であり、システム自体にはサービスを提供しません。特に、「ACID準拠」サーバーは、構成後に書き込み可能にする必要があります。それだけです。

postgresql.conf には、ログに記録される内容を管理するいくつかの設定があります。それらのほとんどは、コマンドラインで設定して、設定ファイルの設定を無効にすることもできます。通常は/var/log/postgresに置かれない WALファイル については話していません。

あなたの場合、私は冗長性を大幅に減らします。とりわけ、私は設定します(そしてサーバーをリロードします):
log_statement = none

データのインポート方法によっては、それ以上の作業が必要になる可能性があります。見る:
log_min_messages

ログファイルの書き込みを完全にスキップするには、次のように設定できます。
log_destination = 'stderr' ...

マニュアルの詳細

6

UbuntuのPostgreSQLパッケージに同梱されているデフォルトのpostgresql.confを想定すると、これらの巨大なログファイルのもっともらしい理由は、データインポートによって次のような警告が大量に生成されることです。

2012-06-11 14:00:01 CEST警告:文字25の文字列リテラルでの\の非標準的な使用
2012-06-11 14:00:01 CESTヒント:バックスラッシュにはエスケープ文字列構文を使用します(例:E '\')。

Sudo more /var/log/postgresql/postgresql-8.4-main.logを実行して、最新のログファイルの実際の内容を確認します。

これらの警告がログファイルが巨大である理由である場合、escape_string_warning/etc/postgresql/8.4/main/postgresql.confをOFFに設定することにより、それらをミュートできます。

この警告が発生する理由については、postgresql 8.4ドキュメントの compatibility notes を参照してください。

UbuntuでのPostgreSQLの他のデフォルトのロギング設定は次のとおりです。

  • log_destination = 'stderr'
  • log_statement = none
  • log_connections = off

これらは、ログのオーバーフローを引き起こしてはならない正気な値です。

ログのローテーションは logrotate によって処理され、/etc/logrotate.d/postgresql-commonで構成されます。

デフォルトでは、次のとおりです。

/var/log/postgresql/*.log {
毎週
copytruncate 10回回転
遅延圧縮
圧縮
通知なし
ミッシングク
}

ログファイルの数を減らしたり、削除を加速したりする場合は、これが変更するファイルです。しかし、これらの巨大なログの根本的な原因を特定して抑制する方が良いでしょう。

1
Daniel Vérité