問題タブ [libpq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
845 参照

postgresql - Cygwin から C で PostgreSQL クライアントを実行する

Cygwin を介して C で非常に単純な PostgreSQL クライアントを構築しようとしています。

これまでに行ったことは次のとおりです。

  • PostgreSQL ソース コード バージョン 9.1.2 をダウンロードしました (サーバーで実行されているのと同じバージョンに一致させるため)
  • Cygwin からソース コードを構成してコンパイルしました。コンパイルは順調に進んだようです。
  • 私が知る限り、ヘッダーファイルは次の場所にあります。
    • /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq、および
    • /cygdrive/c/workspace/src/postgresql-9.1.2/src/include
  • ライブラリは次の場所にあります。
    • /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq

ここから、以下のメイクファイルを使用してクライアント プログラムをコンパイルおよびリンクしました。

コンパイルとリンクは、エラーや警告なしで成功しました。

ただし、プログラムを実行しようとすると、次のエラーが発生します。

これを修正する方法がわかりません。任意のポインタをいただければ幸いです。ああ、もう 1 つ、cygpq.dll が置かれているフォルダーを見つけて、それを指すように LD_LIBRARY_PATH を設定しましたが、それでも同じ結果が得られました。

0 投票する
2 に答える
849 参照

c++ - libpq - テストを書く

libpq の C++ ラッパーを作成しています。しかし、単体テストの書き方がわかりません。私の最初の反応は、libpq インターフェースをモック可能なものにラップすることでしたが、それは目的に反します。誰もこれを以前にやったことがありますか?もしそうなら、どのように?

0 投票する
1 に答える
1709 参照

c - libpq-PQsendQueryは完全な結果を待ちます

PQexec断続的な接続でlibpqの関数がハングする問題があります。メーリングリストを見回した後の解決策は、非同期関数を使用してPQsendQuery/PQgetResult独自のタイムアウトを実装することです。

今私が直面している問題は、PQgetResultそれが戻るまで何度も呼び出す必要がnullあり、それが完了したことを知っているということです。ただし、アプリケーションの残りの部分では、PQresultクエリごとに1つのオブジェクトが必要です。

だから私の質問は:

  1. 複数のを連結/結合する方法はありPQresultますか?
  2. どういうわけかPQisBusyPQconsumeInputを使用して、すべての結果の準備ができるまで待ってから電話をかけることはできPQgetResultますか?
0 投票する
2 に答える
822 参照

c++ - libpq エラー メッセージの割り当て解除

ここで愚かな質問が来ます。libpqPQerrorMessage関数は a を返しますchar const*

今ではそれconstが . では、いつ、どのように解放されるのでしょうか。msgポインターの使用が終了したことをどのように知ることができますか?

最初は、別のエラーメッセージが要求されると割り当てが解除されると思っていましたが、そうではありません。

誰かが私のためにこれに光を当てることができますか?

編集:ドミトリー・イグリシンの功績

postgresqlメーリングリストでこれを尋ねたところ、最初の仮定が正しかったことがわかりました。
ポインターは有効ではなかったmsg1はずで、どういうわけかラッキーでした。

編集: postgresqlドキュメントから

PQエラーメッセージ

接続の操作によって最後に生成されたエラー メッセージを返します。

ほとんどすべての libpq 関数はPQerrorMessage、失敗した場合にメッセージを設定します。libpq の規則により、空でないPQerrorMessage結果は複数の行で構成され、末尾に改行が含まれることに注意してください。呼び出し元は結果を直接解放しないでください。PGconn関連付けられたハンドルが に渡されると解放されPQfinishます。PGconn結果の文字列は、構造に対する操作全体で同じままになるとは考えられません。

0 投票する
1 に答える
681 参照

postgresql - Postgresqlでのテキストクエリ+変換よりもバイナリクエリが遅いですか?

これについて高低を検索しましたが、決定的な答えを見つけることができませんでした。私はアプリケーションの設計を始めたばかりで、データベースに Postgresql を使用し、サーバーに C を使用することにしました。ただし、一部の初期テストでは、紛らわしい数値が示されています。テキスト文字列を介してデータベースにアクセスするのが最速の方法のように思えますが、これは直感に反するように思えます。確かに、データベースは int と float をバイナリとして内部的に保存しており、それらを変換してテキストとして表示する必要があります。使用するには、バイナリに変換する必要があります。より速いルートは、すべてをバイナリのままにしておくことだと思われますが、今日まで、この利点を示すためにバイナリアクセスを取得できないようです。

これは、私が見ているものを示すために作成した簡単なテストケースです(スキーマ+コード)

http://pastebin.com/1AhB8avx

そして、私はこのようなタイミングを見ています:

反復 0 を開始しています... 反復 0: PQparamExec を介して 35 秒で 50000 のバイナリ レコードをフェッチしました 反復 0: PQexecf を介して 34 秒で 50000 のバイナリ レコードをフェッチしました 反復 0: PQexec を介して 25 秒で 50000 のテキスト レコードをフェッチしました

追加の反復は、そのパターンを多かれ少なかれ繰り返すだけです。libpq を直接使用して同様の結果を得ることも試みましたが、このテスト ケースには移植しませんでした。

これはあなたの経験と一致していますか、それとも私はどこかで愚かなだけですか?

ありがとう!

0 投票する
1 に答える
1398 参照

c++ - VC 2010 での SSL を使用した libpq

SSLをサポートするWindows(VS2010 32および64ビット)でlibpqをコンパイルすることに疑問があります。postgresの最新ソースと OpenSSL Win64 v1.0.1c をダウンロードし まし。libpq フォルダーで nmake を実行しました。

cd postgresql-9.2.2\interfaces\libpq

nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include SSL_LIB_PATH=C:\OpenSSL-Win64\lib

その後、コンパイルが終了し、bufferoverflowU.lib が見つかりません。少し調べてみると、この lib は Windows SDK と共にデプロイされており、VS 2005 以降は不要であることがわかりました ( Vista / Win 7 SDK bufferoverflowu.lib linking error を参照)。したがって、libpq の make ファイル (win32.mak:20) で、次の行をコメントアウトしました。

ADD_SECLIB=bufferoverflowU.lib

そしてそれはうまくコンパイルされます。また、この libpq を ssl でテストしても問題はありませんでした。

ビルドから bufferoverflowU.lib を削除するのは良心の呵責が必要ですか、それともメイクファイルが VS 2010 用ではないからですか? (ところで: openssl は、VC フォルダー内のライブラリの名前をそれぞれ *MD.lib にそれぞれ *MT.lib に変更しました。古い名前のライブラリは、C:\OpenSSL-Win64\lib の 1 つ上のディレクトリにあります)

VS2010 ビルドで bufferoverflowU.lib が必要かどうか教えてもらえますか?

乾杯、550

0 投票する
4 に答える
15029 参照

cmake - FindPostgreSQL.cmakeはubuntuでは機能しません

  • Ubuntu 12.04
  • CMake 2.8.9
  • Postgresql 9.2.2

FindPostgreSQLモジュールに検索させようとしています/usr/include/postgresql/libpq-fe.h

これが私の中にあるものですCMakeLists.txt

これは私が得るエラーです:

電話をかける前に次の行を追加しましたfind_packageが、効果がないようです。

グーグルも試しましPostgreSQL_TYPE_INCLUDE_DIRたが、何も見つかりませんでした。他に何を試すことができますか?

0 投票する
2 に答える
943 参照

c - libpq-feでフィールドのサイズを取得する

libpq-feでライブラリを使用しCてpostgresデータベースに接続しています。タイムスタンプを返す
コードを使用してストアドプロシージャを呼び出しています。 このタイムスタンプをchar配列に保存したいと思います。ただし、そのためには、配列を宣言できるように、最初にタイムスタンプのサイズを知る必要があります。私が使用しているサイズを取得するには。あなたはそれについてもっとここで見つけることができます。 libpqfe
int PQfsize(PGresult *res, int field_index);

値を返します8。ただし、実際にはタイムスタンプのサイズ(ゾーンなし)は19です。

PQfsizeが間違った値を返すのはなぜですか?

タイムスタンプのサイズは一定であり、配列を直接宣言してから、を使用して値を取得できますが、PQgetvalueサイズが固定されていないフィールドの配列を宣言する方法を知っています。

フィールドを取得しPGresultて任意の変数に格納するにはどうすればよいですか?

0 投票する
1 に答える
1496 参照

ruby - 不正な PG 接続呼び出しで Ruby スクリプトがハングする

Postgresデータベースに接続し、いくつかのクエリを実行してから、ユーザーにデータを閉じる/返すRubyスクリプトがあります。

スクリプトは正常に動作しますが、不適切なホスト名を指定すると、スクリプト全体がハングするので、ctrl-Z で終了する必要があります。これを回避するには、postgres のバックエンドを調べる必要があることはわかっていますが、libpqそれをすべて自分の Ruby スクリプトにラップする方法についてはかなり迷っています。私はpostgres のものを処理するためにRuby 1.8と を使用しており、接続を開くために呼び出します:pg gem

(options と tty は空文字列です)

どんなヘルプ/ヒント/提案も素晴らしいでしょう!