Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
Tài cách đọc kèo bóng đá này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong cách đọc kèo bóng đá phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

44.3. cách đọc kèo bóng đá

44.3.1. Truy cập cơ sở dữ cách đọc kèo bóng đá từ PL/Perl

Truy cập vào cơ sở dữ liệu từ chức cách đọc kèo bóng đá Perl của bạn có thể được thực hiện thông qua các chức cách đọc kèo bóng đá sau:

spi_exec_query(Truy vấn[,giới hạn])

spi_exec_queryThực thi lệnh SQL và trả về toàn bộ hàng được đặt làm tham chiếu đến một mảng tham chiếu băm. Nếu nhưgiới hạnđược chỉ định và lớn hơn 0, sau đóspi_exec_queryTruy xuất nhiều nhấtgiới hạnhàng, giống như truy vấn bao gồm mộtgiới hạnmệnh đề. Bỏ quaGiới hạnhoặc chỉ định nó dưới dạng số 0 dẫn đến không giới hạn hàng.

Bạn chỉ nên sử dụng lệnh này khi bạn biết rằng tập kết quả sẽ tương đối nhỏ.Đây là một ví dụ về truy vấn (Chọnlệnh) với số lượng hàng tối đa tùy chọn:

$ rv = spi_exec_query ('select * from my_table', 5);

Điều này trả về tối đa 5 hàng từ bảngmy_table. Nếu nhưmy_tablecó cộtmy_column, bạn có thể nhận được giá trị đó từ hàng$ icủa kết quả như thế này:

$ foo = $ rv- hàng [$ i]- my_column;

Tổng số hàng được trả về từ AChọnTruy vấn có thể được truy cập như thế này:

$ NROWS = $ RV- đã xử lý

Đây là một ví dụ sử dụng loại lệnh khác:

12118_12203

Sau đó, bạn có thể truy cập trạng thái lệnh (ví dụ:spi_ok_insert) Như thế này:

$ res = $ rv- status;

Để có số lượng hàng bị ảnh hưởng, làm:

$ nRows = $ rv- đã xử lý;

Đây là một ví dụ hoàn chỉnh:

Tạo thử nghiệm bảng (
    Tôi int,
    v varchar
);

Chèn vào các giá trị kiểm tra (i, v) (1, 'dòng đầu tiên');
Chèn vào các giá trị kiểm tra (i, v) (2, 'dòng thứ hai');
Chèn vào các giá trị kiểm tra (i, v) (3, 'dòng thứ ba');
Chèn vào các giá trị kiểm tra (i, v) (4, 'bất tử');

Tạo hoặc thay thế chức cách đọc kèo bóng đá test_munge () trả về kiểm tra setof dưới dạng $$
    $ rv của tôi = spi_exec_query ('chọn i, v từ thử nghiệm;');
    $ status của tôi = $ rv- status;
    $ nROWS = $ RV- đã xử lý;
    foreach của tôi $ rn (0 .. $ nROWS - 1) 
        $ row của tôi = $ rv- hàng [$ rn];
        $ row- i += 200 nếu được xác định (hàng $- i);
        $ row- v = ~ tr/a-za-z/a-za-z/if (xác định ($ row- v));
        return_next ($ hàng);

    trả lại Undef;
$$ Ngôn ngữ plperl;

Chọn * từ test_munge ();
spi_query (lệnh)
spi_fetchrow (con trỏ)
spi_cursor_close (con trỏ)

spi_queryspi_fetchrowLàm việc cùng nhau như một cặp cho các bộ hàng có thể lớn hoặc cho các trường cách đọc kèo bóng đá bạn muốn trả lại hàng khi chúng đến.spi_fetchrowWorkschỉvớiSPI_Query. Ví dụ sau minh họa cách đọc kèo bóng đá bạn sử dụng chúng cùng nhau:

Tạo loại foo_type as (The_num Integer, The_Text văn bản);

Tạo hoặc thay thế chức cách đọc kèo bóng đá Lô_MD5 (Số nguyên) Trả về setof foo_type dưới dạng $$
    Sử dụng Digest :: MD5 QW (MD5_HEX);
    $ file của tôi = '/usr/share/dict/words';
    $ T = địa phương của tôi;
    ELOG (Thông báo, "Mở tệp $ Tệp tại $ T");
    Mở $ fh của tôi, '<', $ file # ooh, đó là một truy cập tệp!
        hoặc elog (lỗi, "không thể mở tệp $ để đọc: $!");
    my @words = <$ fh;
    đóng $ fh;
    $ t = địa phương;
    ELOG (Thông báo, "Tệp đóng $ Tệp tại $ T");
    Chomp (@words);
    hàng $ của tôi;
    $ STH = spi_Query của tôi ("Chọn * từ Generate_Series (1, $ _ [0]) là B (a)");
    while (được xác định ($ row = spi_fetchrow ($ sth))) 
        return_next (
            The_num = $ $ Row- A,
            The_Text = md5_hex ($ words [rand @words])
        );

    trở lại;
$$ plperlu ngôn ngữ;

Chọn * từ LOTEA_MD5 (500);

Thông thường,spi_fetchrownên được lặp lại cho đến khi nó trả vềUndef, chỉ ra rằng không có nhiều hàng để đọc. Con trỏ được trả về bởiSPI_Queryđược tự động giải phóng khispi_fetchrowreturnUndef. Nếu bạn không muốn đọc tất cả cách đọc kèo bóng đá hàng, thay vào đó hãy gọispi_cursor_closeĐể giải phóng con trỏ. Không làm như vậy sẽ dẫn đến rò rỉ bộ nhớ.

spi_prepare (lệnh, cách đọc kèo bóng đá loại đối số)
spi_query_prepared (kế hoạch, Đối số)
SPI_EXEC_PREPARED (Plan[,thuộc tính],Đối số)
SPI_FreePlan (kế hoạch)

spi_prepare, spi_query_prepared, SPI_EXEC_PREPAREDSPI_FreePlanThực hiện cùng một chức cách đọc kèo bóng đá nhưng đối với các truy vấn đã chuẩn bị.spi_prepareChấp nhận chuỗi truy vấn với trình giữ chỗ đối số được đánh số ($ 1, $ 2, v.v.) và danh sách chuỗi cách đọc kèo bóng đá loại đối số:

$ plan = spi_prepare ('chọn * từ kiểm tra trong đó id $ 1 và name = $ 2',
                                                     'Integer', 'text');

Một khi kế hoạch truy vấn được chuẩn bị bằng một cuộc gọi đếnspi_prepare, gói có thể được sử dụng thay vì truy vấn chuỗi, trongSPI_EXEC_PREPARED, trong đó kết quả giống như được trả về bởispi_exec_queryhoặc trongspi_query_preparedtrả về con trỏ chính xác nhưSPI_Querykhông, sau đó có thể được chuyển chospi_fetchrow. Tham số thứ hai tùy chọn đểSPI_EXEC_PREPAREDlà một tham chiếu băm của cách đọc kèo bóng đá thuộc tính; thuộc tính duy nhất hiện được hỗ trợ làGiới hạn, đặt số lượng hàng tối đa được trả về từ truy vấn. Bỏ quagiới hạnhoặc chỉ định nó dưới dạng số 0 dẫn đến không giới hạn hàng.

Ưu điểm của cách đọc kèo bóng đá truy vấn đã chuẩn bị là có thể sử dụng một kế hoạch đã chuẩn bị cho nhiều hơn một lần thực hiện truy vấn. Sau khi kế hoạch không cần thiết nữa, nó có thể được giải phóng bằngSPI_FreePlan:

Tạo hoặc thay thế hàm init () trả về void dưới dạng $$
        $ _Shared my_plan = spi_prepare ('select (now () + $ 1) :: ngày như bây giờ',
                                        'Khoảng');
$$ Ngôn ngữ plperl;

Tạo hoặc thay thế hàm add_time (khoảng) trả về văn bản dưới dạng $$
        trả về spi_exec_prepared (
                $ _Shared my_plan,
                $ _ [0]
        )- hàng- [0]- bây giờ;
$$ Ngôn ngữ plperl;

Tạo hoặc thay thế chức cách đọc kèo bóng đá đã hoàn thành () trả về void dưới dạng $$
        spi_freeplan ($ _shared my_plan);
        Undef $ _Shared my_plan;
$$ Ngôn ngữ plperl;

Chọn init ();
Chọn add_time ('1 ngày'), add_time ('2 ngày'), add_time ('3 ngày');
Chọn xong ();

  add_time |  add_time |  add_time
------------+------------+------------
 2005-12-10 | 2005-12-11 | 2005-12-12

Lưu ý rằng chỉ số tham số trongspi_prepaređược xác định thông qua $ 1, $ 2, $ 3, v.v.

Một ví dụ khác minh họa việc sử dụng tham số tùy chọn trong20037_20056:

20105_21021
spi_commit ()
spi_rollback ()

Cam kết hoặc quay lại giao dịch hiện tại. Điều này chỉ có thể được gọi trong một thủ tục hoặc khối mã ẩn danh (dolệnh) được gọi từ cấp cao nhất. (Lưu ý rằng không thể chạy cách đọc kèo bóng đá lệnh SQLcam kếthoặcrollbackViaspi_exec_query21811_21984

Đây là một ví dụ:

Tạo quy trình giao dịch_test1 ()
Ngôn ngữ pilperl
Như $$
foreach của tôi $ i (0..9) 
    spi_exec_query ("chèn vào cách đọc kèo bóng đá giá trị test1 (a) ($ i)");
    if ($ i % 2 == 0) 
        Spi_Commit ();
     khác 
        spi_rollback ();

44.3.2. Chức cách đọc kèo bóng đá tiện ích trong PL/Perl

ELOG (Cấp, MSG)

phát ra thông báo nhật ký hoặc lỗi. cách đọc kèo bóng đá cấp độ có thể làDEBUG, log, thông tin, Thông báo, cảnh báoERROR. ERRORlàm tăng tình trạng lỗi; Nếu điều này không bị mắc kẹt bởi mã Perl xung quanh, lỗi sẽ truyền ra truy vấn gọi, khiến giao dịch hiện tại hoặc trừ bị hủy bỏ. Điều này thực sự giống như perlDie23541_23749log_min_messagesclient_min_messagesBiến cấu hình. Nhìn thấyChương 19Để biết thêm thông tin.

quote_literal (chuỗi)

Trả về chuỗi đã cho được trích dẫn phù cách đọc kèo bóng đá để được sử dụng như một chuỗi theo nghĩa đen trong chuỗi câu lệnh SQL. Các trích dẫn đơn và dấu gạch chéo được nhúng được nhân đôi đúng cách. Lưu ý rằngquote_literal24614_24679quote_nullablethường phù cách đọc kèo bóng đá hơn.

QUOTE_NULLABLE (chuỗi)

Trả về chuỗi đã cho được trích dẫn phù cách đọc kèo bóng đá để được sử dụng như một chuỗi theo nghĩa đen trong chuỗi câu lệnh SQL; Hoặc, nếu đối số không hoàn hảo, hãy trả lại chuỗi "NULL" chưa được trích xuất. Các tài liệu đơn và dấu gạch chéo được nhúng được nhân đôi đúng cách.

quote_ident (chuỗi)

Trả về chuỗi đã cho được trích dẫn phù cách đọc kèo bóng đá để được sử dụng làm định danh trong chuỗi câu lệnh SQL. Báo giá chỉ được thêm vào nếu cần thiết (nghĩa là, nếu chuỗi chứa các ký tự không nhận dạng hoặc sẽ được xếp lại trường cách đọc kèo bóng đá). Báo giá nhúng được nhân đôi đúng cách.

decode_bytea (chuỗi)

Trả về dữ cách đọc kèo bóng đá nhị phân không được trình bày được biểu thị bằng nội dung của chuỗi đã cho, phải làbyteađược mã hóa.

encode_bytea (chuỗi)

Trả lạibyteaMẫu được mã hóa của nội dung dữ cách đọc kèo bóng đá nhị phân của chuỗi đã cho.

encode_array_literal (mảng)
encode_array_literal (mảng, Delimiter)

Trả về nội dung của mảng được tham chiếu dưới dạng chuỗi ở định dạng mảng (xemPhần 8.15.2). Trả về giá trị đối số không thay đổi nếu nó không phải là một tham chiếu đến một mảng. Phân định được sử dụng giữa cách đọc kèo bóng đá phần tử của mặc định theo nghĩa đen của mảng thành ","Nếu một dấu phân cách đọc kèo bóng đá không được chỉ định hoặc không được chỉ định.

encode_typed_literal (giá trị, typename)

27926_28124

encode_array_constructor (mảng)

Trả về nội dung của mảng được tham chiếu dưới dạng chuỗi ở định dạng trình xây dựng mảng (xemPhần 4.2.12). Các giá trị riêng lẻ được trích dẫn bằng cách đọc kèo bóng đá sử dụngQUOTE_NULLABLE. Trả về giá trị đối số, được trích dẫn bằngQUOTE_NULLABLE, nếu nó không phải là tham chiếu đến một mảng.

looking_like_number (chuỗi)

Trả về một giá trị thực nếu nội dung của chuỗi đã cho trông giống như một số, theo Perl, trả về sai nếu không. Trả về Undef nếu đối số không hoàn hảo. Không gian dẫn đầu và dấu vết bị bỏ qua.INFVô cực29436_29463

is_array_ref (Đối số)

Trả về giá trị thực nếu đối số đã cho có thể được coi là tham chiếu mảng, nghĩa là, nếu tham chiếu của đối số làmảnghoặcPostgreSQL :: Inserver :: Array. Trả về sai nếu không.