- - PR -
postgresSQLからのエラーについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-05 19:24
お世話になっております。
いろいろWEBで調べたのですが検討がつかず困っております。 postgreSQLデータベースにPHPよりデータをinsertを実行した際に could not send data to server: No buffer space available (0x00002747/10055) というエラーが発生してinsertを実行することができません。 $rs = @pg_query( $this->conn, $this->sql ); //クエリー実行 if ( $rs === false ) { print(pg_last_error($this->conn)); return false; } でprint文で上記エラーが発生します。 おそらくInsertしようとしているbyteaの列に50MBほどのデータをインサートしようと しているのでSQL文が長くて、バッファーが足りないといっているのではないかと 推測しまして、 postgresql.confの中で shared_buffers を 800MBにしても状況は変わりませんでした。 OSはWindows2003です。 LinuxSquareなのですがpostgreSQL,PHP関係でしたので ここに書かせていただきました。 ご助言よろしくおねがいします。 | ||||
|
投稿日時: 2007-01-05 22:46
could not send data to server: No buffer space available (0x00002747/10055)
上記 WindowsのTCP/IP関係エラーコードです 通常はエラーが発生せず、このデータだけエラーなのでしょうか? 5000 を超える番号の TCP ポートから接続しようとすると 'WSAENOBUFS (10055)' エラーが表示される http://support.microsoft.com/kb/196271/ja 上記とwinsockバッファ関係を指摘 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31975&forum=11&6 http://archives.postgresql.org/pgsql-bugs/2006-07/msg00051.php [ メッセージ編集済み 編集者: 99ri 編集日時 2007-01-06 10:04 ] | ||||
|
投稿日時: 2007-01-09 10:39
ご回答ありがとうございます。
いただきました内容で DWORD値をレジストリに追加しました 値の名前:MaxUserPort 値のデータ:65534 がエラーは回避できませんでした。 10MBまでは正常にインサートできるのですが 20MBになるとNo buffer space availableのエラーが発生します。 他になにか考慮する点などありますでしょうか? またbyteaではなくlargeobjectを使用するべきなのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2007-01-09 10:53
byteaはその名の通りbyte arrayです。 メモリ上に確保されるため容量制限が非常に厳しいです。 サーバー/クライアント共に多量のメモリを必要とします。 パフォーマンスの点からも64KB〜1MB程度を上限とすべきでしょう。 #結構前に比較的大きめな結果セットの取得にメモリ不足で失敗したため、 #libpqのソースを眺めて見たのですが、二次元配列的に扱っていて驚きました。 #現在の実装は知りませんが、PostgreSQLはこの辺りは弱そうに思います。 | ||||
|
投稿日時: 2007-01-09 11:14
ご回答ありがとうございます。
今回の仕組みはWEBからアップロードしたエクセルファイルを PostgreSQLのbyteaの列にインサートするものです。 やはり、エクセルファイルはディスク上に保存しておき、 postgreSQLへはそのファイルへのパスを登録しておいたほうが よいということでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2007-01-09 12:07
ポート番号に由来するエラーではないため
OSのリソース(メモリ)でエラーとなっていると思われます ご自身で書かれていますが直接DBに登録しない方式がよいと思います | ||||
|
投稿日時: 2007-01-09 13:05
ありがとうございました。
頂きました方法で対処したいと思います。 よろしくお願いします。 |
1