PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Gọi một hàm do người dùng xác định nằm trong postgres.c trong postgreSQL bằng cách sử dụng GUI được xác định bởi netbeans

Có một số vấn đề ở đây.

Bạn không thể chỉ gọi bất kỳ hàm C nào từ SQL

Đầu tiên, bạn không thể chỉ gọi các hàm tùy ý từ SQL, bạn phải sử dụng các API và macro mở rộng C của PostgreSQL; xem các triển khai hiện có của các hàm có thể gọi trong SQL trong các nguồn để biết ví dụ.

Bạn thường không phải sửa đổi mã lõi, các tiện ích mở rộng thường là đủ

Thứ hai, nếu bạn muốn thêm các chức năng vào PostgreSQL cốt lõi, bạn phải thêm chúng vào src/include/catalog/pg_proc.h vì vậy chúng được xác định trong initdb .

Tuy nhiên, tốt hơn nhiều là sử dụng các phương tiện tải tiện ích mở rộng thích hợp:

Bằng cách này, bạn có thể LOAD một mô-đun mở rộng, CREATE FUNCTION C hoạt động theo tài liệu và gọi chúng từ SQL.

Trong trường hợp cụ thể của bạn, có vẻ như bạn làm cần phải sửa đổi cơ sở mã lõi, nhưng điều này khá bất thường, vì vậy tôi bảo lưu lời khuyên này cho những người khác.

Một hàm C trong phần phụ trợ PostgreSQL không thể được gọi "trực tiếp" từ GUI

Bạn có Java Swing GUI và bạn hình dung bằng cách nào đó gọi một hàm C trong một quy trình khác, thậm chí có thể trên một máy chủ khác, từ nó.

Điều này sẽ không hoạt động vì nhiều lý do, bao gồm:

  • Java không thể gọi trực tiếp các hàm C mà không có mã keo như JNI hoặc JNA .
  • Không thể gọi trực tiếp một hàm C trong một quy trình khác; thay vào đó, bạn phải sử dụng giao tiếp giữa các quá trình (bộ nhớ dùng chung, đường ống, ổ cắm, tệp được chia sẻ, v.v.) để trao đổi thông tin
  • Mặc dù bạn có thể nhúng một trình thông dịch Java vào phần phụ trợ Pg và gọi hàm C qua kiểu trực tiếp JNI, bạn thực sự là không muốn hiển thị Swing GUI trực tiếp từ bên trong phần phụ trợ Pg.

Những gì bạn cần là một quy trình gồm nhiều giai đoạn:

  • Thu thập dữ liệu bạn muốn nắm bắt trong phần phụ trợ PostgreSQL. Nếu bạn định truy cập nó từ cùng một kết nối mà nó được tạo, bạn có thể sử dụng một palloc thông thường đệm. Nếu không, bạn sẽ cần phân bổ bộ đệm ra khỏi bộ nhớ dùng chung hoặc trao đổi dữ liệu bằng hệ thống tệp.

  • Truy cập dữ liệu đó từ một hàm C đã được tạo bằng giao diện SQL có thể gọi được theo tài liệu về hàm mở rộng C của PostgreSQL (ở trên)

  • Sử dụng kết nối PostgreSQL để chuyển dữ liệu từ hàm giao diện có thể gọi SQL sang ứng dụng Java của bạn. Giải mã nó trong ứng dụng của bạn và hiển thị nó như mong muốn.

Thay thế:

  • Yêu cầu chương trình Java của bạn hoặc một tác nhân cho nó, chạy trên cùng một hệ thống với máy chủ PostgreSQL và yêu cầu tác nhân ghi tệp ở vị trí có thể ghi vào Pg và chương trình của bạn có thể đọc được.

  • Đọc các tệp bằng chương trình của bạn hoặc tác nhân của chương trình và xử lý chúng để hiển thị

Bạn thậm chí có thể yêu cầu ghi Pg vào một ổ cắm mà chương trình của bạn đang nghe, nhưng tôi không khuyên bạn nên điều này vì một sự cố trong chương trình của bạn sẽ gây ra các vấn đề về hiệu suất trong 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. postgreSQL - trong so với bất kỳ

  2. Truy vấn SQL để lấy hàng gần đây nhất cho mỗi trường hợp của một khóa nhất định

  3. Cách Cluster Odoo 12 với PostgreSQL Streaming Replication để có tính khả dụng cao

  4. Chạy tệp hàng loạt bằng lệnh psql mà không cần mật khẩu

  5. Ánh xạ kiểu nối tiếp PostgreSQL với chú thích Hibernate