sql >> データベース >  >> RDS >> PostgreSQL

`libpq`がデータフェッチの通知ではなくポーリングを使用するのはなぜですか?

    モノスレッドプログラムの実行モデルでは、非同期クエリ、より一般的にはネットワークソケットから返されるデータによって実行フローを中断することはできません。シグナルのみ(SIGTERM および友人)はフローを中断する可能性がありますが、受信するデータに信号をフックすることはできません。

    そのため、受信データの通知を受け取るためのコールバックを設定することはできません。コールバックを発行するために必要なlibpqのコードは、コードがそれを呼び出さない場合は実行されません。そして、あなたがそれを呼び出さなければならない場合、それはコールバックの全体のポイントを打ち負かします。

    Qtのようなライブラリがあります コールバックを提供しますが、イベントプロセッサとして機能するメインループを使用してゼロから構築されています。ユーザーコードはコールバックで編成されており、受信データのイベントベースの処理が可能です。ただし、この場合、ライブラリが実行フローの所有権を取得します。つまり、そのメインループがデータソースをポーリングします。これは、責任をlibpq以外の別のコードに移すだけです。



    1. SqlGeographyBuilder 使用時の「指定された入力は、有効な地理インスタンスを表していません」例外

    2. 削除されたmysqlデータベースの復元

    3. 無効なOracleプロシージャのコンパイル

    4. sqlは、1つのクエリで合計数とフィルター処理された数を取得します