問題タブ [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.
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 を設定しましたが、それでも同じ結果が得られました。
c++ - libpq - テストを書く
libpq の C++ ラッパーを作成しています。しかし、単体テストの書き方がわかりません。私の最初の反応は、libpq インターフェースをモック可能なものにラップすることでしたが、それは目的に反します。誰もこれを以前にやったことがありますか?もしそうなら、どのように?
c - libpq-PQsendQueryは完全な結果を待ちます
PQexec
断続的な接続でlibpqの関数がハングする問題があります。メーリングリストを見回した後の解決策は、非同期関数を使用してPQsendQuery
/PQgetResult
独自のタイムアウトを実装することです。
今私が直面している問題は、PQgetResult
それが戻るまで何度も呼び出す必要がnull
あり、それが完了したことを知っているということです。ただし、アプリケーションの残りの部分では、PQresult
クエリごとに1つのオブジェクトが必要です。
だから私の質問は:
- 複数のを連結/結合する方法はあり
PQresult
ますか? - どういうわけか
PQisBusy
&PQconsumeInput
を使用して、すべての結果の準備ができるまで待ってから電話をかけることはできPQgetResult
ますか?
c++ - libpq エラー メッセージの割り当て解除
ここで愚かな質問が来ます。libpq
のPQerrorMessage
関数は a を返しますchar const*
今ではそれconst
が . では、いつ、どのように解放されるのでしょうか。msg
ポインターの使用が終了したことをどのように知ることができますか?
最初は、別のエラーメッセージが要求されると割り当てが解除されると思っていましたが、そうではありません。
誰かが私のためにこれに光を当てることができますか?
編集:ドミトリー・イグリシンの功績
postgresqlメーリングリストでこれを尋ねたところ、最初の仮定が正しかったことがわかりました。
ポインターは有効ではなかったmsg1
はずで、どういうわけかラッキーでした。
編集: postgresqlドキュメントから
PQエラーメッセージ
接続の操作によって最後に生成されたエラー メッセージを返します。
ほとんどすべての libpq 関数は
PQerrorMessage
、失敗した場合にメッセージを設定します。libpq の規則により、空でないPQerrorMessage
結果は複数の行で構成され、末尾に改行が含まれることに注意してください。呼び出し元は結果を直接解放しないでください。PGconn
関連付けられたハンドルが に渡されると解放されPQfinish
ます。PGconn
結果の文字列は、構造に対する操作全体で同じままになるとは考えられません。
postgresql - Postgresqlでのテキストクエリ+変換よりもバイナリクエリが遅いですか?
これについて高低を検索しましたが、決定的な答えを見つけることができませんでした。私はアプリケーションの設計を始めたばかりで、データベースに Postgresql を使用し、サーバーに C を使用することにしました。ただし、一部の初期テストでは、紛らわしい数値が示されています。テキスト文字列を介してデータベースにアクセスするのが最速の方法のように思えますが、これは直感に反するように思えます。確かに、データベースは int と float をバイナリとして内部的に保存しており、それらを変換してテキストとして表示する必要があります。使用するには、バイナリに変換する必要があります。より速いルートは、すべてをバイナリのままにしておくことだと思われますが、今日まで、この利点を示すためにバイナリアクセスを取得できないようです。
これは、私が見ているものを示すために作成した簡単なテストケースです(スキーマ+コード)
そして、私はこのようなタイミングを見ています:
反復 0 を開始しています... 反復 0: PQparamExec を介して 35 秒で 50000 のバイナリ レコードをフェッチしました 反復 0: PQexecf を介して 34 秒で 50000 のバイナリ レコードをフェッチしました 反復 0: PQexec を介して 25 秒で 50000 のテキスト レコードをフェッチしました
追加の反復は、そのパターンを多かれ少なかれ繰り返すだけです。libpq を直接使用して同様の結果を得ることも試みましたが、このテスト ケースには移植しませんでした。
これはあなたの経験と一致していますか、それとも私はどこかで愚かなだけですか?
ありがとう!
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
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
たが、何も見つかりませんでした。他に何を試すことができますか?
c - libpq-feでフィールドのサイズを取得する
libpq-fe
でライブラリを使用しC
てpostgresデータベースに接続しています。タイムスタンプを返す
コードを使用してストアドプロシージャを呼び出しています。
このタイムスタンプをchar配列に保存したいと思います。ただし、そのためには、配列を宣言できるように、最初にタイムスタンプのサイズを知る必要があります。私が使用しているサイズを取得するには。あなたはそれについてもっとここで見つけることができます。 libpqfe
int PQfsize(PGresult *res, int field_index);
値を返します8
。ただし、実際にはタイムスタンプのサイズ(ゾーンなし)は19
です。
PQfsizeが間違った値を返すのはなぜですか?
タイムスタンプのサイズは一定であり、配列を直接宣言してから、を使用して値を取得できますが、PQgetvalue
サイズが固定されていないフィールドの配列を宣言する方法を知っています。
フィールドを取得しPGresult
て任意の変数に格納するにはどうすればよいですか?
ruby - 不正な PG 接続呼び出しで Ruby スクリプトがハングする
Postgresデータベースに接続し、いくつかのクエリを実行してから、ユーザーにデータを閉じる/返すRubyスクリプトがあります。
スクリプトは正常に動作しますが、不適切なホスト名を指定すると、スクリプト全体がハングするので、ctrl-Z で終了する必要があります。これを回避するには、postgres のバックエンドを調べる必要があることはわかっていますが、libpq
それをすべて自分の Ruby スクリプトにラップする方法についてはかなり迷っています。私はpostgres のものを処理するためにRuby 1.8
と を使用しており、接続を開くために呼び出します:pg gem
(options と tty は空文字列です)
どんなヘルプ/ヒント/提案も素晴らしいでしょう!