Như đã đề cập trước đây, có hai kèo bóng đá pháp trongPostgres: các kèo bóng đá pháp cơ sở (được xác định trong A Ngôn ngữ lập trình) và các kèo bóng đá pháp tổng hợp (trường hợp). Ví dụ trong Phần này cho đến các chỉ số giao tiếp có thể được tìm thấy trongphức tạp.sqlvàphức tạp.c. kèo bóng đá pháp ví dụ tổng hợp ở trongfuncs.sql.
Một kèo bóng đá pháp do người dùng xác định phải luôn có chức năng đầu vào và đầu ra. Các chức năng này xác định cách kèo bóng đá pháp xuất hiện trong chuỗi (đối với đầu vào của người dùng và đầu ra cho người dùng) và cách kèo bóng đá pháp tổ chức trong bộ nhớ. Hàm đầu vào có một sự phân tách null Chuỗi ký tự làm đầu vào của nó và trả về bên trong (trong bộ nhớ) Đại diện của kèo bóng đá pháp. Chức năng đầu ra lấy nội bộ Đại diện của kèo bóng đá pháp và trả về một ký tự được phân định null sợi dây. Giả sử chúng ta muốn xác định một kèo bóng đá pháp phức tạp đại diện cho số phức. Đương nhiên, chúng tôi chọn đại diện cho một khu phức hợp trong bộ nhớ như sauCCấu trúc:
Typedef Struct Complex gấp đôi x; gấp đôi y; Tổ hợp;và một chuỗi của biểu mẫu (x, y) là chuỗi bên ngoài đại diện. kèo bóng đá pháp chức năng này thường không khó để viết, đặc biệt là chức năng đầu ra. Tuy nhiên, có một số Điểm cần nhớ:
Khi xác định biểu diễn bên ngoài (chuỗi) của bạn, Hãy nhớ rằng cuối cùng bạn phải viết một trình phân tích cú kèo bóng đá pháp cho biểu diễn đó là chức năng đầu vào của bạn!
phức tạp * Complex_in (char *str) Double x, y; Phức tạp *kết quả; if (sscanf (str, "( %lf, %lf)", & x, & y)! = 2) ELOG (WARN, "Complex_in: Lỗi trong phân tích cú kèo bóng đá pháp trả lại null; result = (phức hợp *) palloc (sizeof (phức tạp)); Kết quả- x = x; kết quả- y = y; trả lại (kết quả);Hàm đầu ra có thể chỉ là:
Char * Complex_out (phức tạp *phức tạp) char *kết quả; if (phức tạp == null) trả lại (null); kết quả = (char *) palloc (60); Sprintf (kết quả, "(%g,%g)", phức tạp- x, phức tạp- y); trả lại (kết quả);
Bạn nên cố gắng thực hiện kèo bóng đá pháp chức năng đầu vào và đầu ra nghịch đảo của nhau. Nếu bạn không, bạn sẽ bị nghiêm trọng sự cố khi bạn cần đổ dữ liệu của mình vào một tệp và sau đó Đọc lại (giả sử, vào cơ sở dữ liệu của người khác trên người khác máy tính). Đây là một vấn đề đặc biệt phổ biến khi Số điểm nổi có liên quan.
Để kèo bóng đá pháp địnhphức tạpkèo bóng đá pháp, chúng ta cần Để tạo hai chức năng do người dùng xác định, Complex_in và Complex_out Trước khi tạo kèo bóng đá pháp:
Tạo chức năng Complex_in (mờ đục) Trả lại phức tạp Như 'pgroot/hướng dẫn/obj/phức tạp.so' Ngôn ngữ 'c'; Tạo chức năng Complex_out (mờ đục) Trả lại mờ đục Như 'pgroot/hướng dẫn/obj/phức tạp.so' Ngôn ngữ 'c'; Tạo kèo bóng đá pháp phức tạp ( InterlitalLight = 16, input = Complex_in, đầu ra = Complex_out );
Như đã thảo luận trước đó,PostgresHỗ trợ đầy đủ các mảng của các kèo bóng đá pháp cơ sở. Ngoài ra,PostgresHỗ trợ mảng các kèo bóng đá pháp do người dùng xác định cũng vậy. Khi bạn xác định một kèo bóng đá pháp,Postgrestự động cung cấp hỗ trợ cho Mảng kèo bóng đá pháp đó. Vì lý do lịch sử, kèo bóng đá pháp mảng có cùng tên với kèo bóng đá pháp do người dùng xác định với ký tự dấu gạch dưới _ chuẩn bị. Các kèo bóng đá pháp tổng hợp không cần bất kỳ chức năng nào được xác định họ, vì hệ thống đã hiểu chúng trông như thế nào bên trong.
Các kèo bóng đá pháp được thảo luận đến điểm này là tất cả các đối tượng "nhỏ" - nghĩa là, chúng có kích thước nhỏ hơn 8kb.
Nếu bạn yêu cầu một kèo bóng đá pháp lớn hơn cho một cái gì đó như một Hệ thống truy xuất tài liệu hoặc để lưu trữ bitmap, bạn sẽ cần sử dụngPostgresĐối tượng lớn giao diện hoặc sẽ cần phải biên dịch lạiPostgresphụ trợ để sử dụng lưu trữ nội bộ khối lớn hơn 8kbytes ..Lưu ý:1024 LongWords == 8192 Byte. Trong thực tế, kèo bóng đá pháp phải nhỏ hơn đáng kể so với 8192 byte, vìPostgresTuple và trang trên đầu Cũng phải phù hợp với giới hạn 8kb này. Giá trị thực tế mà Phù hợp phụ thuộc vào kiến trúc máy.