Postgresql 8.4.22 Tài kèo bóng đá euro | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 30.libpq- C Thư viện | Chuyển tiếp nhanh | NEXT |
TheCopykèo bóng đá euro trongPostgreSQLCó các tùy chọn để đọc hoặc viết đến kèo bóng đá euro nối mạng được sử dụng bởilibpq. Các chức năng được mô tả trong này Phần cho phép các ứng dụng tận dụng khả năng này bằng cách cung cấp hoặc tiêu thụ dữ kèo bóng đá euro đã sao chép.
Quy trình tổng thể là ứng dụng đầu tiên phát hành
SQLCopykèo bóng đá euro thông quaPQEXEC
hoặc một trong kèo bóng đá euro năng tương đương. Các
phản hồi cho điều này (nếu không có lỗi trong lệnh) sẽ làpgresultĐối tượng mang mã trạng thái
củaPGRES_COPY_OUThoặcPGRES_COPY_IN(Tùy thuộc vào bản sao được chỉ định
phương hướng). Ứng dụng sau đó nên sử dụng các chức năng của điều này
phần để nhận hoặc truyền các hàng dữ kèo bóng đá euro. Khi truyền dữ kèo bóng đá euro
hoàn thành, một người khácpgresultĐối tượng
được trả lại để chỉ ra thành công hoặc thất bại của việc chuyển nhượng. Của nó
Trạng thái sẽ làPGRES_COMMAND_OKcho
thành công hoặcPGRES_FATAL_ERRORNếu một số
Vấn đề đã gặp phải. Tại thời điểm này, kèo bóng đá euro lệnh SQL có thể
được cấp quaPQEXEC
. (Nó không phải là
có thể thực thi các lệnh SQL khác bằng cách sử dụng cùng một kèo bóng đá euro nối
Trong khiCopyHoạt động là trong
tiến triển.)
Nếu ACopykèo bóng đá euro được cấp quaPQEXEC
Trong một chuỗi có thể
chứa các lệnh bổ sung, ứng dụng phải tiếp tục
tìm nạp kèo bóng đá euro quả quaPQGetResult
Sau khi hoàn thànhCopyTrình tự. Chỉ một
khiPQGetResult
returnnullCó chắc chắn rằngPQEXEC
Chuỗi lệnh được thực hiện và an toàn khi
phát hành thêm kèo bóng đá euro lệnh.
13489_13582PGRES_COPY_OUThoặcPGRES_COPY_INtừPQEXEC
hoặcPQGetResult
.
APGRESULTđối tượng mang một trong những Các giá trị trạng thái này mang một số dữ kèo bóng đá euro bổ sung vềCopyHoạt động đang bắt đầu. Cái này Dữ liệu bổ sung có sẵn bằng cách sử dụng các chức năng cũng được sử dụng liên quan đến kèo bóng đá euro quả truy vấn:
PQNFields
Trả về số lượng cột (trường) sẽ được sao chép.
PQBinaryTuples
14573_14775Copycho Thêm thông tin.
PQFFormat
15056_15399Copy,, Chỉ kèo bóng đá euro cột nhị phân xuất hiện trong một bản sao nhị phân; Vì vậy, kèo bóng đá euro định dạng trên mỗi cột luôn phù hợp với định dạng tổng thể tại hiện tại.)
Lưu ý:Các giá trị dữ kèo bóng đá euro bổ sung này chỉ là Có sẵn khi sử dụng Giao thức 3.0. Khi sử dụng Giao thức 2.0, Tất cả các chức năng này sẽ trả về 0.
Các chức năng này được sử dụng để gửi dữ kèo bóng đá euro trongSao chép từ Stdin. Họ sẽ thất bại nếu được gọi khi kèo bóng đá euro nối không có trongcopy_inState.
PQPutCopydata
Gửi dữ kèo bóng đá euro đến máy chủ trong khicopy_inBang.
int pqputcopydata (pgconn *Conn, const char *bộ đệm, int nbytes);
TruyềnCopyDữ kèo bóng đá euro trong
được chỉ địnhbộ đệm, của
chiều dàinbyte, đến máy chủ.
kèo bóng đá euro quả là 1 nếu dữ liệu được gửi, không nếu nó không
được gửi bởi vì nỗ lực sẽ chặn (trường hợp này chỉ là
có thể nếu kèo bóng đá euro nối ở chế độ không chặn) hoặc -1
Nếu xảy ra lỗi. (Sử dụngpqerrormessage
Để lấy chi tiết nếu
Giá trị trả về là -1. Nếu giá trị bằng không, hãy đợi
viết sẵn và thử lại.)
Ứng dụng có thể chiaCopyluồng dữ kèo bóng đá euro thành tải bộ đệm của bất kỳ Kích thước thuận tiện. Ranh giới tải bộ đệm không có ngữ nghĩa ý nghĩa khi gửi. Nội dung của dữ kèo bóng đá euro luồng phải khớp với định dạng dữ kèo bóng đá euro dự kiến bởiCopykèo bóng đá euro; nhìn thấyCopyđể biết chi tiết.
pqputcopyend
Gửi chỉ báo cuối cùng vào máy chủ trong thời giancopy_inState.
int pqputcopyend (pgconn *Conn, const char *errormsg);
kèo bóng đá euro thúccopy_inHoạt động Thành công nếuerrormsglànull. Nếu nhưerrormsgkhông phảinullsau đóCopybị buộc phải thất bại, với chuỗi được trỏ bởierrormsg18680_18878Copyvì lý do riêng của nó. Cũng lưu ý rằng Tùy chọn buộc lỗi không hoạt động khi sử dụng kèo bóng đá euro nối Pre-3.0 Protocol.)
kèo bóng đá euro quả là 1 nếu dữ liệu chấm dứt được gửi, không
Nếu nó không được gửi vì nỗ lực sẽ chặn (cái này
trường hợp chỉ có thể nếu kèo bóng đá euro nối không bị chặn
chế độ), hoặc -1 nếu xảy ra lỗi. (Sử dụngpqerrormessage
Để lấy chi tiết nếu
Giá trị trả về là -1. Nếu giá trị bằng không, hãy đợi
viết sẵn và thử lại.)
Sau khi gọi thành côngpqputcopyend
, gọiPQGetResult
Để có được kèo bóng đá euro quả cuối cùng
trạng thái củasao chéplệnh. Một
có thể đợi kèo bóng đá euro quả này có sẵn trong thông thường
đường. Sau đó trở lại hoạt động bình thường.
Các chức năng này được sử dụng để nhận dữ kèo bóng đá euro trongSao chép vào stdout. Họ sẽ thất bại nếu được gọi khi kèo bóng đá euro nối không có trongCopy_outBang.
PQGetCopydata
Nhận dữ kèo bóng đá euro từ máy chủ trong khicopy_outBang.
int PQGetCopydata (PGConn *Conn, Char ** Buffer, int async);
cố gắng lấy một hàng dữ kèo bóng đá euro khác từ máy chủ
Trong mộtCopy. Dữ kèo bóng đá euro luôn luôn
trả lại một hàng dữ kèo bóng đá euro tại một thời điểm; Nếu chỉ một hàng một phần là
Có sẵn, nó không được trả lại. Sự trở lại thành công của một
Hàng dữ kèo bóng đá euro liên quan đến việc phân bổ một khối bộ nhớ để giữ
dữ kèo bóng đá euro. Thebộ đệmTham số
Phải khôngnull. *bộ đệm21316_2137621393_21399Trong trường hợp ở đâu
Không có bộ đệm được trả lại. Không phảinullBộ đệm kèo bóng đá euro quả phải được giải phóng bằng cách sử dụngPQFreemem
Khi không cần thiết.
Khi một hàng được trả về thành công, giá trị trả về
là số lượng byte dữ liệu trong hàng (điều này sẽ luôn luôn
lớn hơn 0). Chuỗi được trả về luôn luôn là
kèo bóng đá euro thúc null, mặc dù điều này có lẽ chỉ hữu ích cho
TextualCopy. kèo bóng đá euro quả của số không
chỉ ra rằngCopyvẫn còn
trong tiến trình, nhưng chưa có hàng nào có sẵn (điều này chỉ là
có thể khiAsynclà đúng).
kèo bóng đá euro quả của -1 chỉ ra rằngCopy22223_22302pqerrormessage
Vì lý do).
KhiAsynclà đúng (không
không),PQGetCopydata
Will
không chặn chờ đầu vào; nó sẽ trả về 0 nếuCopyvẫn đang được tiến hành nhưng không có
Hàng hoàn chỉnh có sẵn. (Trong trường hợp này, hãy đợi
Read-Ready và sau đó gọiPQConsumeInput
Trước khi gọiPQGetCopydata
Một lần nữa.) KhiAsynclà sai (không),PQGetCopydata
Sẽ chặn
Cho đến khi dữ kèo bóng đá euro có sẵn hoặc hoạt động hoàn thành.
sauPQGetCopydata
return -1, gọiPQGetResult
Để có được kèo bóng đá euro quả cuối cùng
trạng thái củaCopyLệnh. Một
có thể đợi kèo bóng đá euro quả này có sẵn trong thông thường
đường. Sau đó trở lại hoạt động bình thường.
kèo bóng đá euro năng này đại diện cho các phương thức xử lý cũ hơnCopy. Mặc dù họ vẫn hoạt động, họ được không dùng nữa do xử lý lỗi kém, các phương pháp bất tiện phát hiện kèo bóng đá euro thúc dữ liệu và thiếu hỗ trợ cho nhị phân hoặc Chuyển khoản không chặn.
PQGetLine
Đọc một dòng ký tự kèo bóng đá euro thúc mới (được truyền bởi máy chủ) vào chuỗi bộ đệm có kích thướclength.
24375_24493
Hàm này sao chép lênlength-1 ký tự vào bộ đệm và
Chuyển đổi việc chấm dứt dòng mới thành một byte số 0.PQGetLine
returnEOFở cuối đầu vào, 0 nếu
toàn bộ dòng đã được đọc và 1 nếu bộ đệm đầy
Nhưng dòng mới kèo bóng đá euro thúc vẫn chưa được đọc.
Lưu ý rằng ứng dụng phải kiểm tra xem có phải mới dòng bao gồm hai ký tự\., trong đó chỉ ra rằng máy chủ có Đã hoàn thành việc gửi kèo bóng đá euro quả củaCopylệnh. Nếu ứng dụng có thể nhận kèo bóng đá euro dòng nhiều hơnlength-1 ký tự dài, cần chăm sóc Để chắc chắn rằng nó nhận ra\.dòng chính xác (và không, ví dụ, sai lầm kèo bóng đá euro thúc một dòng dữ liệu dài cho một dòng Terminator).
PQGetLineAsync
Đọc một hàngCopyDữ kèo bóng đá euro (truyền bởi máy chủ) vào bộ đệm mà không có chặn.
int PQGetLineAnyNC (PGConn *Conn, Char *bộ đệm, int bufsize);
Hàm này tương tựPQGetLine
26187_26251CopyDữ kèo bóng đá euro không đồng bộ, nghĩa là không chặn. Có
đã ban hànhCopykèo bóng đá euro và
Got APGRES_COPY_OUTPhản hồi, ứng dụng nên gọiPQConsumeInput
vàPQGetLineAsync
Cho đến khi kèo bóng đá euro thúc dữ liệu
tín hiệu được phát hiện.
Không giống nhưPQGetLine
26746_26831
trên mỗi cuộc gọi,PQGetLineAsync
sẽ trả về dữ kèo bóng đá euro nếu a
Hàng dữ kèo bóng đá euro hoàn chỉnh có sẵn tronglibpqbộ đệm đầu vào. Nếu không, không
Dữ kèo bóng đá euro được trả về cho đến khi phần còn lại của hàng đến. Các
chức năng trả về -1 nếu điểm đánh dấu dữ kèo bóng đá euro cuối sao
được công nhận hoặc 0 nếu không có dữ kèo bóng đá euro hoặc
Số dương cho số byte dữ kèo bóng đá euro
trả lại. Nếu -1 được trả về, người gọi phải gọi tiếp theoPQENDCOPY
, sau đó trả về
để xử lý bình thường.
Dữ kèo bóng đá euro được trả về sẽ không vượt ra ngoài hàng dữ kèo bóng đá euro ranh giới. Nếu có thể, toàn bộ hàng sẽ được trả lại tại một thời gian. Nhưng nếu bộ đệm do người gọi cung cấp cũng vậy nhỏ để giữ một hàng được gửi bởi máy chủ, sau đó là một phần Hàng dữ kèo bóng đá euro sẽ được trả về. Với dữ kèo bóng đá euro văn bản, điều này có thể được phát hiện bằng cách kiểm tra xem byte trả về cuối cùng là\ nhay không. (Trong một nhị phânCopy, Phân tích cú pháp thực tế củaCopyĐịnh dạng dữ kèo bóng đá euro sẽ cần để đưa ra quyết định tương đương.) Chuỗi không được chấm dứt. (Nếu bạn muốn thêm một chấm dứt null, hãy chắc chắn vượt quabufsizeMột nhỏ hơn phòng thực sự có sẵn.)
pqputline
Gửi một chuỗi kèo bóng đá euro thúc null đến máy chủ. Trả lại 0 nếu ok vàEOFNếu không thể gửi chuỗi.
int pqputline (PGConn *Conn, const char *chuỗi);
TheCopyluồng dữ kèo bóng đá euro được gửi bởi
một loạt các cuộc gọi đếnpqputline
có định dạng giống như
Được trả về bởiPQGetLineAsync
,,
ngoại trừ các ứng dụng không bắt buộc phải gửi chính xác
một hàng dữ kèo bóng đá euro trên mỗipqputline
cuộc gọi; Bạn có thể gửi một dòng một phần hoặc nhiều dòng
mỗi cuộc gọi.
29396_29403trướcPostgreSQLGiao thức 3.0, nó là cần thiết để ứng dụng gửi rõ ràng Hai ký tự\.như một trận chung kèo bóng đá euro dòng để chỉ cho máy chủ rằng nó đã hoàn thành GửiCopyDữ kèo bóng đá euro. Trong khi Điều này vẫn hoạt động, nó không được chấp nhận và đặc biệt Ý nghĩa của\.có thể dự kiến sẽ được gỡ bỏ trong một bản phát hành trong tương lai. Nó là đủ để gọi
PQENDCOPY
sau khi đã gửi Dữ kèo bóng đá euro thực tế.
pqputnbytes
Gửi một chuỗi không kèo bóng đá euro thúc không đến máy chủ. Trả về 0 nếu ok vàEOFNếu không thể để gửi chuỗi.
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
không cần phải kèo bóng đá euro thúc vì số lượng byte
Gửi được chỉ định trực tiếp. Sử dụng quy trình này khi
gửi dữ liệu nhị phân.
pqendcopy
Đồng bộ hóa với máy chủ.
int pqendcopy (pgconn *Conn);
Hàm này đợi cho đến khi máy chủ hoàn thành
sao chép. Nó sẽ được cấp khi chuỗi cuối cùng
đã được gửi đến máy chủ bằng cách sử dụngpqputline
hoặc khi chuỗi cuối cùng có
được nhận từ máy chủ bằng cách sử dụngPGGetLine
. Nó phải được phát hành hoặc
Máy chủ sẽ nhận được"Out of Sync"Với máy khách. Khi trở về từ chức năng này,
Máy chủ đã sẵn sàng để nhận lệnh SQL tiếp theo. kèo bóng đá euro
Giá trị trở lại là 0 khi hoàn thành thành công, không
nếu không thì. (Sử dụngpqerrormessage
Để lấy chi tiết nếu
giá trị trả về không khác.)
Khi sử dụngPQGetResult
,
Ứng dụng sẽ trả lờiPGRES_COPY_OUTkèo bóng đá euro quả bằng cách thực thiPQGetLine
nhiều lần,
theo sau làPQENDCOPY
sau
dòng Terminator được nhìn thấy. Sau đó nó sẽ trở lạiPQGetResult
Vòng lặp cho đếnPQGetResult
Trả về một null
con trỏ. Tương tự APGRES_COPY_INkèo bóng đá euro quả được xử lý bởi A
sê -ripqputline
cuộc gọi
theo sau làPQENDCOPY
, sau đó
trở lạiPQGetResult
Vòng lặp. Sự sắp xếp này sẽ đảm bảo rằngCopykèo bóng đá euro được nhúng trong một loạtSQLkèo bóng đá euro lệnh sẽ được
được thực hiện chính xác.
kèo bóng đá euro ứng dụng cũ có khả năng gửiCopyViaPQEXEC
33261_33320PQENDCOPY
.
Điều này sẽ chỉ hoạt động chính xác nếuCopylà duy nhấtSQLkèo bóng đá euro trong kèo bóng đá euro
sợi dây.