10598_10631 | ||||
---|---|---|---|---|
prev | UP | Chương 31.libpq- C Thư viện | Tiếp theo |
TheCopylệnh trongPostgreSQLCó các tùy chọn để đọc hoặc viết đến kèo tỷ số bóng đá euro hôm nay nối mạng được sử dụng bởilibpq. kèo tỷ số bóng đá euro hôm nay được mô tả trong phần này 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ữ liệu đã sao chép.
Quy trình tổng thể là ứng dụng đầu tiên phát hành SQLCopylệnh thông quaPQEXEC
hoặc một trong kèo tỷ số bóng đá euro hôm nay hàm tương đương. kèo tỷ số bóng đá euro hôm nay
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 kèo tỷ số bóng đá euro hôm nay của điều này
phần để nhận hoặc truyền các hàng dữ liệu. Khi truyền dữ liệu là
Hoàn thành, người khácpgresultĐối tượng là
trở lại để chỉ ra thành công hoặc thất bại của việc chuyển nhượng. Tình trạng của nó
sẽ làPGRES_COMMAND_OKđể thành công hoặcPGRES_FATAL_ERRORNếu một số vấn đề là
gặp phải. Tại thời điểm này, kèo tỷ số bóng đá euro hôm nay lệnh SQL có thể được cấp quaPQEXEC
. (Không thể
Thực hiện các lệnh SQL khác bằng cùng một kèo tỷ số bóng đá euro hôm nay nối trong khiCopyHoạt động đang được tiến hành.)
Nếu ACopyLệnh đượ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 tỷ số bóng đá euro hôm nay quả
thông quaPQGetResult
Sau khi hoàn thànhCopyTrình tự. Chỉ khiPQGetResult
returnnullCó chắc chắn rằngPQEXEC
lệnh
Chuỗi được hoàn thành và an toàn khi đưa ra nhiều lệnh hơn.
Các chức năng của phần này chỉ được thực thi sau khi
có được trạng thái kèo tỷ số bóng đá euro hôm nay quả củaPGRES_COPY_OUThoặcPGRES_COPY_INtừPQEXEC
hoặcPQGetResult
.
APGRESULTđối tượng mang một trong những kèo tỷ số bóng đá euro hôm nay giá trị trạng thái này mang một số dữ liệu 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 trong kèo tỷ số bóng đá euro hôm nay nối với kèo tỷ số bóng đá euro hôm nay quả truy vấn:
PQNFields
Trả về số lượng cột (trường) sẽ được sao chép.
PQBinaryTuples
0 Cho biết định dạng bản sao tổng thể là văn bản (kèo tỷ số bóng đá euro hôm nay hàng được phân tách bởi NewLines, kèo tỷ số bóng đá euro hôm nay cột được phân tách bằng kèo tỷ số bóng đá euro hôm nay ký tự phân cách, v.v.). 1 Cho biết định dạng bản sao tổng thể là nhị phân. Nhìn thấyCopyĐể biết thêm thông tin.
PQFFormat
Trả về mã định dạng (0 cho văn bản, 1 cho nhị phân) với mỗi cột của hoạt động sao chép. Mã định dạng trên mỗi cột sẽ luôn bằng không khi định dạng bản sao tổng thể là văn bản, nhưng Định dạng nhị phân có thể hỗ trợ cả cột văn bản và nhị phân. (Tuy nhiên, kể từ khi triển khai hiện tạiCopy, chỉ kèo tỷ số bóng đá euro hôm nay cột nhị phân xuất hiện trong một bản sao nhị phân; Vì vậy, kèo tỷ số bóng đá euro hôm nay đị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 ý:Những giá trị dữ liệu bổ sung này chỉ khả dụng Khi sử dụng Giao thức 3.0. Khi sử dụng giao thức 2.0, tất cả những thứ này kèo tỷ số bóng đá euro hôm nay sẽ trả về 0.
kèo tỷ số bóng đá euro hôm nay này được sử dụng để gửi dữ liệu trongSao chép từ Stdin. Họ sẽ thất bại nếu được gọi khi kèo tỷ số bóng đá euro hôm nay nối không ởcopy_inState.
PQPutCopydata
Gửi dữ kèo tỷ số bóng đá euro hôm nay đến máy chủ trong thời giancopy_inBang.
int pqputcopydata (pgconn *Conn, const char *bộ đệm, int nbytes);
TruyềnCopyDữ kèo tỷ số bóng đá euro hôm nay trong
được chỉ địnhbộ đệm, độ dàinbyte, đến máy chủ. kèo tỷ số bóng đá euro hôm nay quả là 1 nếu dữ liệu
đã được gửi, không nếu nó không được gửi vì nỗ lực sẽ chặn
(Trường hợp này chỉ có thể nếu kèo tỷ số bóng đá euro hôm nay 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 sự trở lại
Giá trị 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 tỷ số bóng đá euro hôm nay thành tải bộ đệm của bất kỳ kích thước thuận tiện nào. Tải bộ đệm Ranh giới không có ý nghĩa ngữ nghĩa khi gửi. Nội dung của luồng dữ kèo tỷ số bóng đá euro hôm nay phải khớp với định dạng dữ kèo tỷ số bóng đá euro hôm nay được mong đợi bởiCopylệnh; nhìn thấyCopyĐể biết chi tiết.
pqputcopyend
Gửi chỉ số cuối dữ kèo tỷ số bóng đá euro hôm nay đến máy chủ trong thời giancopy_inBang.
int pqputcopyend (pgconn *Conn, const char *errormsg);
kèo tỷ số bóng đá euro hôm nay thúccopy_inHoạt động thành công nếu nhưerrormsglànull. Nếu nhưerrormsgkhông phảinullsau đóCopybị buộc phải thất bại, với chuỗi được trỏ bởierrormsgĐược sử dụng làm thông báo lỗi. (Một người nên không cho rằng thông báo lỗi chính xác này sẽ trở lại từ Máy chủ, tuy nhiên, vì máy chủ có thể đã thất bạiCopyvì 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 tỷ số bóng đá euro hôm nay nối Pre-3.0 Protocol.)
kèo tỷ số bóng đá euro hôm nay 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 (trường hợp này chỉ là
có thể nếu kèo tỷ số bóng đá euro hôm nay nối ở chế độ không chặn) hoặc -1 nếu một
xảy ra lỗi. (Sử dụngpqerrormessage
Để truy xuất chi tiết nếu giá trị trả về là -1. Nếu giá trị là
Không, đợi để viết sẵn và thử lại.)
Sau khi gọi thành côngpqputcopyend
, gọiPQGetResult
Để có được trạng thái kèo tỷ số bóng đá euro hôm nay quả cuối cùng của
TheCopyLệnh. Người ta có thể chờ đợi điều này
kèo tỷ số bóng đá euro hôm nay quả sẽ có sẵn theo cách thông thường. Sau đó trở lại bình thường
hoạt động.
kèo tỷ số bóng đá euro hôm nay này được sử dụng để nhận dữ liệu trong thời gianSao chép vào stdout. Họ sẽ thất bại nếu được gọi khi kèo tỷ số bóng đá euro hôm nay nối không ởCopy_outBang.
PQGetCopydata
18988_19027copy_outBang.
19093_19189
cố gắng lấy một hàng dữ kèo tỷ số bóng đá euro hôm nay khác từ máy chủ trong thời gianCopy. Dữ kèo tỷ số bóng đá euro hôm nay luôn được trả về một hàng dữ kèo tỷ số bóng đá euro hôm nay
tại một thời điểm; Nếu chỉ có một hàng một phần có sẵn, nó không được trả lại.
Trả lại thành công của một hàng dữ kèo tỷ số bóng đá euro hôm nay liên quan đến việc phân bổ một khối
bộ nhớ để giữ dữ kèo tỷ số bóng đá euro hôm nay. The19510_19518tham số phải khôngnull. *bộ đệmđược đặt để trỏ đến bộ nhớ được phân bổ,
hoặc tonullTrong trường hợp không có bộ đệm nào
trả lại. Không phảinullBộ đệm kèo tỷ số bóng đá euro hôm nay quả nên
được giải phóng bằng cách sử dụngpqfreemem
Khi không
lâu hơn 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 lớn hơn
không). Chuỗi được trả về luôn luôn kèo tỷ số bóng đá euro hôm nay thúc, mặc dù điều này
có lẽ chỉ hữu ích cho văn bảnCopy.
kèo tỷ số bóng đá euro hôm nay quả của 0 chỉ ra rằngsao chépvẫn đang được tiến hành, nhưng chưa có hàng nào có sẵn (điều này chỉ là
có thể khiAsynclà đúng). Một kèo tỷ số bóng đá euro hôm nay quả
của -1 chỉ ra rằngCopyđược thực hiện. MỘT
kèo tỷ số bóng đá euro hôm nay quả của -2 chỉ ra rằng xảy ra lỗi (tham khảopqerrormessage
Vì lý do).
khiAsynclà đúng (không phải bằng không),PQGetCopydata
Sẽ không chặn chờ
cho đầ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 nào có sẵn. (Trong này
trường hợp chờ đọc sẵn sàng 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 tỷ số bóng đá euro hôm nay có sẵn
hoặc hoạt động hoàn thành.
21093_21101PQGetCopydata
return -1,
gọiPQGetResult
Để có được trận chung kèo tỷ số bóng đá euro hôm nay
Trạng thái kèo tỷ số bóng đá euro hôm nay quả củaCopylệnh. Một người có thể
Đợi kèo tỷ số bóng đá euro hôm nay quả này có sẵn theo cách thông thường. Sau đó trở lại
hoạt động bình thường.
kèo tỷ số bóng đá euro hôm nay này đại diện cho các phương thức xử lý cũ hơnCopy. Mặc dù chúng vẫn hoạt động, nhưng chúng không được Do xử lý lỗi kém, các phương pháp phát hiện bất tiện kèo tỷ số bóng đá euro hôm nay thúc dữ liệu và thiếu hỗ trợ cho nhị phân hoặc không chặn chuyển nhượng.
PQGetLine
Đọc một dòng ký tự kèo tỷ số bóng đá euro hôm nay thúc mới (được truyền đi bởi máy chủ) thành chuỗi bộ đệm có kích thướclength.
int PQGetLine (PGConn *Conn, Char *bộ đệm, int length);
Hàm này sao chép lênlength-1
ký tự thành bộ đệm và chuyển đổi dòng mới kèo tỷ số bóng đá euro hôm nay thúc
vào một byte bằng không.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 kèo tỷ số bóng đá euro hôm nay thúc
Newline chưa được đọc.
22608_22699\., mà Cho biết rằng máy chủ đã hoàn thành việc gửi kèo tỷ số bóng đá euro hôm nay quả củaCopyLệnh. Nếu ứng dụng có thể nhận kèo tỷ số bóng đá euro hôm nay dòng nhiều hơnlength-1 ký tự dài, cần phải quan tâm Chắc chắn nó nhận ra\.dòng chính xác (và không, ví dụ, sai lầm của một dòng dữ kèo tỷ số bóng đá euro hôm nay dài cho một dòng Terminator).
PQGetLineAsync
Đọc một hàngCopyDữ kèo tỷ số bóng đá euro hôm nay (truyền bởi máy chủ) vào bộ đệm mà không chặn.
int PQGetLineAnync (PGConn *Conn, Char *bộ đệm, int bufsize);
Hàm này tương tự23555_23566
, nhưng nó có thể được sử dụng bởi kèo tỷ số bóng đá euro hôm nay ứng dụng
phải đọcCopyDữ kèo tỷ số bóng đá euro hôm nay không đồng bộ,
Đó là, mà không chặn. Đã phát hànhCopyLệnh và nhận đượcPGRES_COPY_OUTPhản hồi, ứng dụng nên gọiPQConsumeInput
vàPQGetLineAsync
Cho đến khi tín hiệu cuối cùng của dữ kèo tỷ số bóng đá euro hôm nay
đã phát hiện.
Không giống nhưPQGetLine
, Hàm này
Chịu trách nhiệm phát hiện kèo tỷ số bóng đá euro hôm nay thúc dữ liệu.
trên mỗi cuộc gọi,PQGetLineAsync
Will
Trả về dữ kèo tỷ số bóng đá euro hôm nay nếu một hàng dữ kèo tỷ số bóng đá euro hôm nay hoàn chỉnh có sẵn tronglibpqbộ đệm đầu vào. Nếu không, không có dữ kèo tỷ số bóng đá euro hôm nay nào
trở lại cho đến khi phần còn lại của hàng đến. Hàm trả về -1
Nếu điểm đánh dấu dữ kèo tỷ số bóng đá euro hôm nay cuối cùng đã được nhận dạng hoặc 0 nếu không có dữ kèo tỷ số bóng đá euro hôm nay
có sẵn hoặc một số dương đưa số byte
dữ kèo tỷ số bóng đá euro hôm nay được trả về. Nếu -1 được trả về, người gọi phải gọi tiếp theoPQENDCOPY
24604_24645
24651_24982\ 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 tỷ số bóng đá euro hôm nay sẽ cần xác định tương đương.) Chuỗi được trả về không Null-chấm dứt. (Nếu bạn muốn thêm một null chấm dứt, hãy chắc chắn Vượt qua ABufsizeMột nhỏ hơn phòng thực sự có sẵn.)
pqputline
Gửi một chuỗi kèo tỷ số bóng đá euro hôm nay thúc null đến máy chủ. Trả về 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ữ liệu được gửi bởi một loạt
của kèo tỷ số bóng đá euro hôm nay cuộc gọi đếnpqputline
có cùng
định dạng khi được trả về bởiPQGetLineAsync
, ngoại trừ kèo tỷ số bóng đá euro hôm nay ứng dụng không
bắt buộc phải gửi chính xác một hàng dữ liệu cho mỗipqputline
cuộc gọi; Gửi một dòng một phần là ổn
hoặc nhiều dòng cho mỗi cuộc gọi.
Lưu ý:trướcPostgreSQLGiao thức 3.0, cần thiết cho ứng dụng một cách rõ ràng Gửi hai ký tự\.như một dòng cuối cùng để cho máy chủ rằng nó đã gửi xongCopyDữ kèo tỷ số bóng đá euro hôm nay. Trong khi điều này vẫn hoạt động, nó không được và ý nghĩa đặc biệt 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 tỷ số bóng đá euro hôm nay thực tế.
pqputnbytes
Gửi một chuỗi không kèo tỷ số bóng đá euro hôm nay thúc không đến máy chủ. Trả về 0 nếu Ok và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ừ việc bộ đệm dữ liệu không cần phải kèo tỷ số bóng đá euro hôm nay thúc vì
Số byte để gửi được chỉ định trực tiếp. Sử dụng thủ tục 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 việc sao chép.
Nó sẽ được phát hành khi chuỗi cuối cùng đã được gửi đến
máy chủ sử dụngpqputline
hoặc khi nào
Chuỗi cuối cùng đã đượ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
khách hàng. 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. Giá trị trả lại là 0 trên thành công
Hoàn thành, khác không. (Sử dụngpqerrormessage
Để lấy chi tiết nếu trả về
giá trị là không khác nhau.)
Khi sử dụngPQGetResult
, The
Ứng dụng sẽ trả lờiPGRES_COPY_OUTkèo tỷ số bóng đá euro hôm nay quả bằng cách thực thiPQGetLine
Cứu, theo sau làpqendcopy
Sau khi thấy dòng Terminator được nhìn thấy. Nó
sau đó sẽ trở lạiPQGetResult
Vòng lặp cho đếnPQGetResult
Trả về một null
con trỏ. Tương tự APGRES_COPY_INkèo tỷ số bóng đá euro hôm nay quả
được xử lý bởi một loạtpqputline
cuộc gọi theo sau làPQENDCOPY
, sau đó
trở lạiPQGetResult
Vòng lặp. Cái này
sự sắp xếp sẽ đảm bảo rằng mộtCopyLệnh được nhúng trong một loạtSQLkèo tỷ số bóng đá euro hôm nay lệnh sẽ được thực thi chính xác.
kèo tỷ số bóng đá euro hôm nay ứng dụng cũ có khả năng gửiCopyViaPQEXEC
và
Giả sử rằng giao dịch được thực hiện sauPQENDCOPY
. Điều này sẽ chỉ hoạt động chính xác nếu29301_29307là duy nhấtSQLLệnh trong chuỗi lệnh.