2012-03-28 14 views
0

すべて、Postgresqlのpgstartup.logファイルの問題

私は、開発環境で実行していて、主キーが挿入されるように重複したレコードを禁止しているテーブルに行く同時挿入の数十を持っています。これはまさにそれが意図したものです。私の問題は、それぞれの重複レコードがERRORまたはWARNINGとしてログファイルに記録されていたため、巨大なログファイルを取得していたことです。いずれにせよ、それは記録されていた。私は設定ファイルでこれを無効にして、すべてがpgstartup.logに記録されています。このファイルは時々20ギグ以上になる。このファイルfronも大きく大きくならないようにするにはどうすればいいですか?

おかげで、あなたはおそらく、ログローテーションツールを使用することができます

答えて

2

Postgresは、MERGEを備えていないINSERTはIGNORE、またUPSERT :(

代わりに直接挿入で、しかし、あなたが重複した挿入を防ぐために(CTEを使用して)サロゲートMERGEを使用するか、IGNORE挿入することができます。

WITH upsert AS 
(UPDATE "your table" yt SET .... WHERE yt.key=<KEY VALUE> 
    RETURNING yt.* 
) 
INSERT INTO "your table" 
SELECT ... FROM "your table" WHERE key NOT IN (SELECT key FROM upsert); 

R

1

アダム、例えば:logrotate(8)は定期的に切り捨てるか、それが特定のサイズや年齢に達したときに、ログファイルを圧縮します。

+0

これはちょうど半分のソリューションです。まだ生成されますメッセージをログに記録し、CPUとIOが無駄になります。 – tothphu