Như đã đề cập trước đây, có hai kèo bóng đá euro trongPostgres: các kèo bóng đá euro cơ sở (được xác định trong A Ngôn ngữ lập trình) và các kèo bóng đá euro 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. Các ví dụ tổng hợp ở trongfuncs.sql.
Một kèo bóng đá euro 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 đá euro 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 đá euro 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 đá euro. Chức năng đầu ra lấy nội bộ Đại diện của kèo bóng đá euro 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 đá euro 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. Các kèo bóng đá euro này thường không khó để viết, đặc biệt là kèo bóng đá euro đầ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ú pháp cho biểu diễn đó là kèo bóng đá euro đầ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ú 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 các kèo bóng đá euro đầ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.
Để xác địnhphức tạpkèo bóng đá euro, 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 đá euro:
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 đá euro 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 đá euro cơ sở. Ngoài ra,PostgresHỗ trợ mảng các kèo bóng đá euro do người dùng xác định cũng vậy. Khi bạn xác định một kèo bóng đá euro,Postgrestự động cung cấp hỗ trợ cho Mảng kèo bóng đá euro đó. Vì lý do lịch sử, kèo bóng đá euro mảng có cùng tên với kèo bóng đá euro 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 đá euro 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 đá euro đượ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 đá euro lớn hơn cho một cái gì đó như 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.Lưu ý:1024 Longwords == 8192 byte. Trong thực tế, kèo bóng đá euro 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.