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 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
Tài liệu 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 kèo bóng đá pháp phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

1.7. Các chức năng được liên kèo bóng đá pháp với lệnh sao chép

lệnh kèo bóng đá pháp trongPostgreSQLCó các tùy chọn để đọc hoặc viết đến kèo bóng đá pháp nối mạng được sử dụng bởilibpq. Do đó, các chức năng là cần thiết để Truy cập trực tiếp kèo bóng đá pháp nối mạng này để các ứng dụng có thể thực hiện lợi thế của khả năng này.

kèo bóng đá pháp năng này chỉ được thực thi sau khi có đượcPGRES_COPY_OUThoặcPGRES_COPY_INĐối tượng kèo bóng đá pháp quả từPQEXEChoặcPQGetResult.

  • PQGetLineĐọc a dòng ký tự kèo bóng đá pháp thúc mới (được truyền đi bởi Máy chủ phụ trợ) vào chuỗi bộ đệm có độ dài kích thước.

    int PQGetLine (PGConn *Conn,
                  Char *String,
                  int length)

    nhưfgets, thói quen này Bản kèo bóng đá pháp lên đến chiều dài 1 ký tự thành chuỗi. Nó giống nhưNhậnTuy nhiên, trong đó Chuyển đổi việc chấm dứt dòng mới thành một byte số 0.PQGetLinereturnEOFỞ cuối đầu vào, 0 nếu toàn bộ dòng đã được đọc và 1 nếu bộ đệm đầy nhưng chấm dứt dòng mới chưa được đọc.

    12630_12729\., chỉ ra rằng máy chủ phụ trợ đã gửi xong kèo bóng đá pháp quả của lệnh sao chép. Nếu Ứng dụng có thể nhận được các dòng nhiều hơn chiều dài-1 các ký tự dài, cần phải quan tâm để chắc chắn người ta nhận ra\.13037_13167src/bin/psql/copy.cChứa các thói quen ví dụ xử lý chính xác giao thức kèo bóng đá pháp.

  • PQGetLineAsyncĐọc a dòng ký tự kèo bóng đá pháp thúc mới (được truyền đi bởi máy chủ phụ trợ) vào bộ đệm mà không chặn.

    int PQGetLineAnyNC (PGConn *Conn,
                       Char *bộ đệm,
                       int bufsize)

    thói quen này tương tựPQGetLine13716_13884PGRES_COPY_OUTPhản hồi, The Ứng dụng nên gọiPQConsumeInputPQGetLineAsyncCho đến khi tín hiệu kèo bóng đá pháp thúc dữ liệu được phát hiện. Không giống nhưPQGetLine,, Thói quen này chịu trách nhiệm phát hiện kèo bóng đá pháp thúc dữ liệu. Trên mỗi cuộc gọi,PQGetLineAsyncSẽ trả về dữ liệu nếu dòng dữ liệu hoàn chỉnh được kèo bóng đá pháp thúc có sẵn tronglibpq's bộ đệm đầu vào hoặc nếu dòng dữ liệu đến quá dài để phù hợp trong bộ đệm được cung cấp bởi người gọi. Nếu không, không có dữ liệu nào trở lại cho đến khi phần còn lại của dòng đến.

    Thông thường trả về -1 nếu điểm đánh dấu dữ liệu cuối kèo bóng đá pháp được công nhận hoặc 0 nếu không có dữ liệu hoặc tích cực Số cho số byte dữ liệu được trả về. Nếu -1 là đã trả về, người gọi phải gọi tiếp theoPQENDCOPY, và sau đó trở lại bình thường xử lý. Dữ liệu được trả về sẽ không vượt ra ngoài Nhân vật Newline. Nếu có thể, toàn bộ dòng sẽ được trả lại Đã có lúc. Nhưng nếu bộ đệm do người gọi cung cấp cũng vậy nhỏ để giữ một dòng được gửi bởi phần phụ trợ, sau đó là một phần dữ liệu dòng sẽ được trả lại. Điều này có thể được phát hiện bằng cách kiểm tra Liệu Byte cuối cùng được trả lại là\ nhay không. Chuỗi trả về không được chấm dứt. (Nếu bạn Muốn thêm NULL chấm dứt, hãy chắc chắn vượt quaBufsizeMột nhỏ hơn phòng thực sự có sẵn.)

  • pqputlineGửi a Chuỗi kèo bóng đá pháp thúc null vào máy chủ phụ trợ. Trả về 0 nếu ĐƯỢC RỒI,EOFNếu không thể gửi sợi dây.

    int pqputline (pgconn *Conn,
                  const char *chuỗi);

    Lưu ý Ứng dụng phải gửi rõ ràng hai ký tự\.Trên dòng cuối cùng đến chỉ ra phần phụ trợ rằng nó đã gửi xong dữ liệu.

  • pqputnbytesGửi a Chuỗi không kèo bóng đá pháp thúc không null vào máy chủ phụ trợ. Trả về 0 Nếu ok,EOFNếu không thể gửi sợi dây.

    int pqputnbytes (pgconn *Conn,
                    const char *bộ đệm,
                    int nbytes);

    Điều này giống hệtpqputline, ngoại trừ bộ đệm dữ liệu cần không bị kèo bóng đá pháp thúc vì số lượng byte gửi là được chỉ định trực tiếp.

  • pqendcopyĐồng bộ hóa với phụ trợ. Chức năng này đợi cho đến khi phần phụ trợ có Hoàn thành bản kèo bóng đá pháp. Nó nên được ban hành khi cái cuối cùng Chuỗi đã được gửi đến phần phụ trợ bằngpqputlinehoặc khi chuỗi cuối cùng được nhận được từ phần phụ trợ bằng cách sử dụngPGGetLine17066_17117"Out of Sync"với phía trước. Khi trở về từ chức kèo bóng đá pháp này, phần phụ trợ là Sẵn sàng nhận lệnh SQL tiếp theo. Giá trị trả về là 0 Khi hoàn thành thành công, khác không.

    int pqendcopy (pgconn *Conn);

    làm ví dụ:

    PQEXEC (Conn, "Tạo bảng foo (A Int4, B Char (16), D Double Precision)");
    PQEXEC (Conn, "kèo bóng đá pháp foo từ stdin");
    Pqputline (Conn, "3 \ Thello World \ t4.5 \ n");
    Pqputline (Conn, "4 \ tgoodbye World \ t7.11 \ n");
    ...
    Pqputline (Conn, "\. \ N");
    Pqendcopy (Conn);

Khi sử dụngPQGetResult, The Ứng dụng sẽ trả lờiPGRES_COPY_OUTkèo bóng đá pháp quả bằng cách thực thiPQGetLineCứu, theo sau làPQENDCOPYSau khi thấy dòng Terminator được nhìn thấy. Nó sau đó sẽ trở lạiPQGetResultVòng lặp cho đếnPQGetResultTrả về null. Tương tự APGRES_COPY_INkèo bóng đá pháp quả được xử lý bởi A sê -ripqputlineCuộc gọi theo sau quaPQENDCOPY, sau đó quay lạiPQGetResultVòng lặp. Sự sắp xếp này sẽ đảm bảo rằng một lệnh kèo bóng đá pháp hoặc kèo bóng đá pháp ra lệnh sê -riSQLkèo bóng đá pháp lệnh sẽ được được thực hiện chính xác.

Các ứng dụng cũ có khả năng gửi một bản sao hoặc kèo bóng đá pháp ra thông quaPQEXECvà giả sử rằng Giao dịch được thực hiện sauPQENDCOPY. Điều này sẽ hoạt động chính xác chỉ khi kèo bóng đá pháp vào/ra là duy nhấtSQLkèo bóng đá pháp trong chuỗi kèo bóng đá pháp.