PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memanggil fungsi yang ditentukan pengguna yang terletak di postgres.c di postgreSQL menggunakan GUI yang ditentukan oleh netbeans

Ada beberapa masalah di sini.

Anda tidak dapat memanggil sembarang fungsi C dari SQL

Pertama, Anda tidak bisa hanya memanggil fungsi arbitrer dari SQL, Anda harus menggunakan API dan makro ekstensi C PostgreSQL; lihat implementasi fungsi SQL-callable yang ada di sumber sebagai contoh.

Anda biasanya tidak perlu mengubah kode inti, ekstensi seringkali sudah cukup

Kedua, jika Anda ingin menambahkan fungsi ke inti PostgreSQL, Anda harus menambahkannya ke src/include/catalog/pg_proc.h jadi mereka didefinisikan selama initdb .

Namun, jauh lebih baik menggunakan fasilitas pemuatan ekstensi yang tepat:

Dengan cara ini Anda dapat LOAD modul ekstensi, CREATE FUNCTION fungsi C sesuai dengan dokumen, dan memanggilnya dari SQL.

Dalam kasus khusus Anda, sepertinya Anda melakukannya perlu memodifikasi basis kode inti, tetapi ini sangat tidak biasa, jadi saya menyimpan saran ini untuk orang lain.

Fungsi C di backend PostgreSQL tidak dapat dipanggil "langsung" dari GUI

Anda memiliki Java Swing GUI dan Anda membayangkan entah bagaimana memanggil fungsi C dalam proses yang berbeda, bahkan mungkin pada host yang berbeda, darinya.

Ini tidak akan berhasil karena banyak alasan, termasuk:

  • Java tidak bisa langsung memanggil fungsi C tanpa kode lem seperti JNI atau JNA .
  • Tidak mungkin memanggil fungsi C dalam proses yang berbeda secara langsung; Anda harus menggunakan komunikasi antar-proses (memori bersama, pipa, soket, file bersama, dll) untuk bertukar informasi
  • Meskipun Anda dapat menyematkan penerjemah Java di backend Pg dan memanggil fungsi C melalui JNI secara langsung, Anda benar-benar tidak ingin mencoba menampilkan GUI Swing langsung dari dalam backend Pg.

Yang Anda butuhkan adalah proses multi-tahap:

  • Kumpulkan data yang ingin Anda ambil di backend PostgreSQL. Jika Anda ingin mengaksesnya dari koneksi yang sama dengan yang dibuat, Anda dapat menggunakan palloc biasa akan buffer. Jika tidak, Anda perlu mengalokasikan buffer dari memori bersama atau bertukar data menggunakan sistem file.

  • Akses data tersebut dari fungsi C yang telah dibuat dengan antarmuka yang dapat dipanggil SQL sesuai dengan dokumentasi fungsi ekstensi C PostgreSQL (di atas)

  • Gunakan koneksi PostgreSQL untuk mentransfer data dari fungsi antarmuka SQL-callable Anda ke aplikasi Java Anda. Dekode di aplikasi Anda dan tampilkan sesuai keinginan.

Bergantian:

  • Mengharuskan program Java Anda, atau agennya, berjalan pada sistem yang sama dengan server PostgreSQL dan meminta agen menulis file di lokasi yang dapat ditulis ke Pg dan dibaca oleh program Anda.

  • Baca file menggunakan program Anda atau agennya dan proses untuk ditampilkan

Anda bahkan dapat meminta Pg menulis ke soket yang sedang didengarkan oleh program Anda, tetapi saya tidak menyarankan ini karena penghentian di program Anda akan menyebabkan masalah kinerja di PostgreSQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi atas Postgres pada karakter Turki tidak mengembalikan hasil yang diharapkan

  2. permintaan postgresql melalui beberapa skema

  3. SELECT kemunculan kombinasi kolom dengan kondisi minimum pada COUNT

  4. Masalah pembuatan Pemicu PostgreSQL

  5. cara menghitung waktu antara dua cap waktu (PostgreSQL)