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

netbeansによって定義されたGUIを使用して、postgreSQLのpostgres.cにあるユーザー定義関数を呼び出す

    ここにはいくつかの問題があります。

    SQLからC関数だけを呼び出すことはできません

    まず、SQLから任意の関数を呼び出すだけでなく、PostgreSQLのC拡張APIとマクロを使用する必要があります。例として、ソース内のSQL呼び出し可能関数の既存の実装を確認してください。

    通常、コアコードを変更する必要はありません。多くの場合、拡張機能で十分です

    次に、コアPostgreSQLに関数を追加する場合は、それらをsrc/include/catalog/pg_proc.hに追加する必要があります。 したがって、それらはinitdbの間に定義されます 。

    ただし、適切な拡張ロード機能を使用することをお勧めします。

    このようにして、LOADできます 拡張モジュール、CREATE FUNCTION Cはドキュメントに従って機能し、SQLから呼び出します。

    あなたの特定のケースでは、あなたがしているように見えます コアコードベースを変更する必要がありますが、これは非常に珍しいので、他の人のためにこのアドバイスを保持しています。

    PostgreSQLバックエンドのC関数をGUIから「直接」呼び出すことはできません

    あなたはJavaSwingGUIを持っていて、C関数を別のプロセスで、場合によっては別のホストで、それから何らかの形で呼び出すことを想定しています。

    これは、次のようなさまざまな理由で機能しません。

    • Javaは、JNIのようなグルーコードなしでC関数を直接呼び出すことはできません。 またはJNA
    • 別のプロセスでC関数を直接呼び出すことはできません。代わりに、プロセス間通信(共有メモリ、パイプ、ソケット、共有ファイルなど)を使用して情報を交換する必要があります
    • JavaインタープリターをPgバックエンドに埋め込んで、JNIを介してC関数を直接呼び出すことはできますが、本当に Pgバックエンド内から直接SwingGUIを表示しようとしないでください。

    必要なのは多段階のプロセスです:

    • PostgreSQLバックエンドでキャプチャするデータを収集します。作成されたのと同じ接続からアクセスする場合は、通常のpallocを使用できます。 'dバッファ。それ以外の場合は、共有メモリからバッファを割り当てるか、ファイルシステムを使用してデータを交換する必要があります。

    • PostgreSQLのC拡張関数のドキュメント(上記)に従って、SQL呼び出し可能なインターフェイスで作成されたC関数からそのデータにアクセスします

    • PostgreSQL接続を使用して、SQL呼び出し可能インターフェース関数からJavaアプリケーションにデータを転送します。アプリケーションでデコードし、必要に応じて表示します。

    または:

    • JavaプログラムまたはそのエージェントがPostgreSQLサーバーと同じシステムで実行され、エージェントがPgに書き込み可能で、プログラムが読み取り可能な場所にファイルを書き込むようにする必要があります。

    • プログラムまたはそのエージェントを使用してファイルを読み取り、表示用に処理します

    プログラムがリッスンしているソケットにPgを書き込むこともできますが、プログラムのストールがPostgreSQLのパフォーマンスの問題を引き起こすため、これはお勧めしません。




    1. Oracle DB10がインストールされているマシンでODP.NET11xcopyデプロイメントが機能しないのはなぜですか?

    2. DBに最後に挿入された行の値

    3. JDBCタイプの方言マッピングなし:-9

    4. sqlalchemyテーブルが空かどうかを確認します