postgresインポートで Cannot allocate memory for output buffer

本番データを社内DBサーバに移行してテストしようとして
psqlからインポートしようとしたら、

Cannot allocate memory for output buffer
(out of memory)

というエラーでインポート出来なかった。


※ちなみにエクスポートは普通にこんな感じ。

pg_dump hogehoge_db > hogehoge.sql

まあ、以下を見る限り2G制限を超えてるってことなんだが…*1
http://archives.postgresql.org/pgsql-general/2009-11/msg01185.php

なぜメモリ使いまくる?

そもそも、postgresの設定上では物理メモリ以上の設定してない。
shmmaxの設定か?と思って見てみても問題なさげ。
念のため shared_buffer や maintenance_work_mem を下げてみても同じ。


topコマンドで見てみるとpsqlがガシガシメモリ食いまくって終了〜

psql?

とここで小ハマっていたのだがあることに気付いた。
メモリ食ってるのpostgresプロセスじゃなくね?


改めてログを見てみると「エラーが一つだけ表示されている」。
普段はエラー出ててもインポート自体に影響ないものばかりだったし、
今回もエラーは出ててもかなり時間かかってたからインポート自体はされていると思っていた…が!

原因

データはインポートされておらず、
単純にエクスポートしたSQLテキストがガンガンpsqlに送られて
psql自体のメモリが溢れちゃった」
ということみたい。

というわけで

きちんとエラーログは確認しましょう!

*1:32bitOS