như được mô tả trongPhần 38.2, PostgreSQLcó thể được mở rộng để hỗ trợ kèo tỷ số bóng đá euro hôm nay loại dữ liệu mới. Phần này mô tả cách xác định kèo tỷ số bóng đá euro hôm nay loại cơ sở mới, là kèo tỷ số bóng đá euro hôm nay loại dữ liệu được xác định dưới mức củaSQLNgôn ngữ. Tạo một loại cơ sở mới yêu cầu thực hiện kèo tỷ số bóng đá euro hôm nay chức năng để hoạt động trên loại bằng ngôn ngữ cấp thấp, thường là C.
kèo tỷ số bóng đá euro hôm nay ví dụ trong phần này có thể được tìm thấy trongComplex.sql
vàphức tạp.c
trongSRC/Hướng dẫn
Thư mục phân phối nguồn. Xemreadme
Tệp trong thư mục đó cho kèo tỷ số bóng đá euro hôm nay hướng dẫn về chạy kèo tỷ số bóng đá euro hôm nay ví dụ.
Một loại do người dùng xác định phải luôn có kèo tỷ số bóng đá euro hôm nay chức năng đầu vào và đầu ra. kèo tỷ số bóng đá euro hôm nay chức năng này xác định cách loại xuất hiện trong chuỗi (cho đầu vào của người dùng và đầu ra cho người dùng) và cách sắp xếp loại trong bộ nhớ.
Giả sử chúng ta muốn xác định một kèo tỷ số bóng đá euro hôm nayphức tạp
đại diện cho kèo tỷ số bóng đá euro hôm nay số phức. Một cách tự nhiên để biểu diễn một số phức trong bộ nhớ sẽ là cấu trúc C sau:
Typedef Struct Complex
Chúng ta sẽ cần phải biến kèo tỷ số bóng đá euro hôm nay này thành một tham chiếu, vì nó quá lớn để phù hợp với mộtDatum
Giá trị.
Là biểu diễn chuỗi bên ngoài của kèo tỷ số bóng đá euro hôm nay, chúng tôi chọn một chuỗi của biểu mẫu(x, y)
.
kèo tỷ số bóng đá euro hôm nay hàm đầu vào và đầu ra thường không khó để viết, đặc biệt là chức năng đầu ra. Nhưng khi xác định biểu diễn chuỗi bên ngoài của loại, hãy nhớ rằng cuối cùng bạn phải viết trình phân tích cú pháp hoàn chỉnh và mạnh mẽ cho biểu diễn đó làm chức năng đầu vào của bạn.
pg_function_info_v1 (Complex_in);
Hàm đầu ra có thể chỉ là:
pg_function_info_v1 (Complex_out);
Bạn nên cẩn thận để thực hiện kèo tỷ số bóng đá euro hôm nay hàm đầu vào và đầu ra nghịch đảo của nhau. Nếu bạn không, bạn sẽ gặp vấn đề nghiêm trọng khi bạn cần gửi dữ liệu của mình vào một tệp và sau đó đọc lại. Đây là một vấn đề đặc biệt phổ biến khi có liên quan đến số điểm nổi.
Tùy chọn, một loại do người dùng xác định có thể cung cấp kèo tỷ số bóng đá euro hôm nay thói quen đầu vào và đầu ra nhị phân. I/O nhị phân thường nhanh hơn nhưng ít di động hơn I/O văn bản.phức tạp
, chúng tôi sẽ cõng trên kèo tỷ số bóng đá euro hôm nay bộ chuyển đổi I/O nhị phân cho loạifloat8
:
pg_function_info_v1 (Complex_Recv);
Khi chúng tôi đã viết kèo tỷ số bóng đá euro hôm nay hàm I/O và biên dịch chúng thành một thư viện dùng chung, chúng tôi có thể xác địnhphức tạp
kèo tỷ số bóng đá euro hôm nay trong SQL. Đầu tiên chúng tôi khai báo nó là kèo tỷ số bóng đá euro hôm nay shell:
Tạo kèo tỷ số bóng đá euro hôm nay phức tạp;
Điều này đóng vai trò là người giữ chỗ cho phép chúng tôi tham chiếu loại trong khi xác định kèo tỷ số bóng đá euro hôm nay chức năng I/O của nó. Bây giờ chúng ta có thể xác định kèo tỷ số bóng đá euro hôm nay chức năng I/O:
Tạo chức năng Complex_in (cString)FileName
'FileName
'FileName
'FileName
'
Cuối cùng, chúng tôi có thể cung cấp định nghĩa đầy đủ về kiểu dữ liệu:
Tạo kèo tỷ số bóng đá euro hôm nay phức tạp (
Khi bạn xác định kèo tỷ số bóng đá euro hôm nay cơ sở mới,PostgreSQLTự động cung cấp hỗ trợ cho kèo tỷ số bóng đá euro hôm nay mảng thuộc loại đó. Loại mảng thường có cùng tên với loại cơ sở với ký tự dấu gạch dưới (_
) Chuẩn bị.
Một khi loại dữ liệu tồn tại, chúng ta có thể khai báo kèo tỷ số bóng đá euro hôm nay chức năng bổ sung để cung cấp kèo tỷ số bóng đá euro hôm nay hoạt động hữu ích trên kiểu dữ liệu. kèo tỷ số bóng đá euro hôm nay toán tử sau đó có thể được xác định trên đỉnh kèo tỷ số bóng đá euro hôm nay chức năng và nếu cần, kèo tỷ số bóng đá euro hôm nay lớp toán tử có thể được tạo để hỗ trợ lập chỉ mục của kiểu dữ liệu.
17784_17971Char [4]
Trường không bao giờ được truy cập trực tiếp (có tên thông thườngVL_LEN_
). Bạn phải sử dụngset_varsize ()
Macro để lưu trữ tổng kích thước của mốc dữ liệu (bao gồm cả trường chiều dài) trong trường này vàVarsize ()
Để lấy nó. (kèo tỷ số bóng đá euro hôm nay macro này tồn tại vì trường Độ dài có thể được mã hóa tùy thuộc vào nền tảng.)
Để biết thêm chi tiết, hãy xem mô tả củaPostgreSQL: Tài liệu: 11: tỷlệnh.
Nếu kèo tỷ số bóng đá euro hôm nay giá trị của kiểu dữ liệu của bạn khác nhau về kích thước (ở dạng bên trong), thì thường mong muốn tạo kiểu dữ liệuPostgresql: Tài kèo bóng đá euro: 11: 69.2. NƯỚNG-able (xemPhần 69.2). Bạn nên làm điều này ngay cả khi kèo tỷ số bóng đá euro hôm nay giá trị luôn quá nhỏ để được nén hoặc lưu trữ bên ngoài, vìPostgreSQL: Tài liệu:cũng có thể tiết kiệm không gian trên dữ liệu nhỏ, bằng cách giảm chi phí tiêu đề.
Để hỗ trợbánh mì nướngLưu trữ, kèo tỷ số bóng đá euro hôm nay chức năng C hoạt động trên kiểu dữ liệu phải luôn cẩn thận để giải nén bất kỳ giá trị nướng nào mà chúng được trao bằng cách sử dụngpg_detoast_datum
. (Chi tiết này được ẩn theo thông thường bằng cách xác định kèo tỷ số bóng đá euro hôm nay cụ thểgetarg_datatype_p
macros.) Sau đó, khi chạyTạo kèo tỷ số bóng đá euro hôm nay
lệnh, chỉ định độ dài bên trong làBiến
và chọn một số tùy chọn lưu trữ phù hợp kháctrơn
.
Nếu căn chỉnh dữ liệu là không quan trọng (chỉ cho một hàm cụ thể hoặc vì kèo tỷ số bóng đá euro hôm nay dữ liệu chỉ định căn chỉnh byte) thì có thể tránh được một số chi phí củapg_detoast_datum
. Bạn có thể sử dụngpg_detoast_datum_packed
Thay vào đó (theo thông thường được ẩn bằng cách kèo tỷ số bóng đá euro hôm naygetarg_datatype_pp
Macro) và sử dụng macroVarsize_any_exhdr
vàVardata_any
Để truy cập một mốc dữ liệu có khả năng đóng gói. Một lần nữa, dữ liệu được trả về bởi kèo tỷ số bóng đá euro hôm nay macro này không được căn chỉnh ngay cả khi định nghĩa kiểu dữ liệu chỉ định căn chỉnh.pg_detoast_datum
giao diện.
Mã cũ thường xuyên khai báoVL_LEN_
như mộtINT32
trường thay vìChar [4]
. Điều này ổn miễn là định nghĩa cấu trúc có kèo tỷ số bóng đá euro hôm nay trường khác có ít nhấtint32
Căn chỉnh. Nhưng thật nguy hiểm khi sử dụng một định nghĩa cấu trúc như vậy khi làm việc với một mốc dữ liệu có khả năng không được sắp xếp;
Một tính năng khác được kích hoạt bởibánh mì nướngHỗ trợ là khả năng cóMở rộngBiểu diễn dữ liệu trong bộ nhớ thuận tiện hơn để làm việc với định dạng được lưu trữ trên đĩa. Thông thường hoặcHồiFlatHồiĐịnh dạng lưu trữ Varlena cuối cùng chỉ là một đốm byte; Ví dụ, nó không thể chứa con trỏ, vì nó có thể được sao chép vào kèo tỷ số bóng đá euro hôm nay vị trí khác trong bộ nhớ.PostgreSQLCung cấp một cách đểMở rộngHồiĐịnh dạng phẳng thành một biểu diễn phù hợp hơn với tính toán, sau đó chuyển định dạng đó trong bộ nhớ giữa kèo tỷ số bóng đá euro hôm nay hàm của kiểu dữ liệu.
Để sử dụng lưu trữ mở rộng, kiểu dữ liệu phải xác định định dạng mở rộng tuân theo kèo tỷ số bóng đá euro hôm nay quy tắc được đưa ra trongsrc/bao gồm/elils/expandeddatum.h
, và cung cấp kèo tỷ số bóng đá euro hôm nay chức năng choMạnhMở rộngHồiGiá trị varlena phẳng thành định dạng mở rộng vàFlattenHồiĐịnh dạng mở rộng trở lại đại diện varlena thông thường. Sau đó đảm bảo rằng tất cả kèo tỷ số bóng đá euro hôm nay chức năng C cho kiểu dữ liệu có thể chấp nhận biểu diễn, có thể bằng cách chuyển đổi một chức năng khác ngay khi nhận được.pg_detoast_datum
Macro được xác định để chuyển đổi đầu vào mở rộng thành định dạng phẳng thông thường. Do đó, kèo tỷ số bóng đá euro hôm nay chức năng hiện có hoạt động với định dạng Varlena phẳng sẽ tiếp tục hoạt động, mặc dù hơi kém hiệu quả, với kèo tỷ số bóng đá euro hôm nay đầu vào mở rộng;
C kèo tỷ số bóng đá euro hôm nay chức năng biết cách làm việc với biểu diễn mở rộng thường rơi vào hai loại: kèo tỷ số bóng đá euro hôm nay chức năng chỉ có thể xử lý định dạng mở rộng và kèo tỷ số bóng đá euro hôm nay loại có thể xử lý kèo tỷ số bóng đá euro hôm nay đầu vào varlena mở rộng hoặc phẳng. Cái trước dễ dàng hơn để viết nhưng có thể kém hiệu quả hơn, bởi vì việc chuyển đổi đầu vào phẳng sang hình thức mở rộng để sử dụng bởi một hàm duy nhất có thể có giá cao hơn được lưu bằng cách vận hành trên định dạng mở rộng.VARATT_IS_EXPANDER_HEADER ()
Macro để kèo tỷ số bóng đá euro hôm nay định dạng nào họ nhận được.
Thebánh mì nướngCơ sở hạ tầng không chỉ cho phép kèo tỷ số bóng đá euro hôm nay giá trị varlena thông thường được phân biệt với kèo tỷ số bóng đá euro hôm nay giá trị mở rộng mà còn phân biệtRead-Writexôngvàchỉ đọcHồiCon trỏ đến kèo tỷ số bóng đá euro hôm nay giá trị mở rộng. C kèo tỷ số bóng đá euro hôm nay chức năng chỉ cần kiểm tra giá trị mở rộng hoặc sẽ chỉ thay đổi nó theo những cách an toàn và không có thể xem xét, không cần quan tâm đến loại con trỏ nào họ nhận được.
Để biết kèo tỷ số bóng đá euro hôm nay ví dụ về làm việc với kèo tỷ số bóng đá euro hôm nay giá trị mở rộng, hãy xem Cơ sở hạ tầng mảng tiêu chuẩn, đặc biệtsrc/backend/utils/adt/mảng_expanding.c
.