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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran trang chohiện tại9431_9512

Chương 28.libpq- C soi kèo bóng đá truoctran

libpqCGiao diện của lập trình viên ứng soi kèo bóng đá truoctran vớiPostgreSQL. libpqlà một tập hợp các chức năng soi kèo bóng đá truoctran mà Cho phép các chương trình khách hàng chuyển các truy vấn choPostgreSQLMáy chủ phụ trợ và để nhận soi kèo bóng đá truoctran quả của các truy vấn này.

libpqcũng là cơ bản động cơ cho soi kèo bóng đá truoctran số khácPostgreSQLGiao diện ứng soi kèo bóng đá truoctran, bao gồm Những người được viết cho C ++, Perl, Python, TCL vàECPG. Vì vậy, soi kèo bóng đá truoctran số khía cạnh của14214_14221hành vi của Bạn sử dụng soi kèo bóng đá truoctran trong những gói đó. Cụ thể,Phần 28.11, Phần 28.12Phần 28,14Mô tả hành vi đó là Có thể hiển thị cho người dùng của bất kỳ ứng soi kèo bóng đá truoctran nào sử soi kèo bóng đá truoctranlibpq.

soi kèo bóng đá truoctran số chương trình ngắn được bao gồm ở cuối chương này (kèo bóng đá) để hiển thị cách Viết các chương trình sử soi kèo bóng đá truoctranlibpq. Ngoài ra còn có soi kèo bóng đá truoctran số ví dụ đầy đủ vềlibpqỨng soi kèo bóng đá truoctran trong thư mụcsrc/test/exampleTrong mã nguồn phân bổ.

Chương trình khách hàng sử soi kèo bóng đá truoctranlibpqPhải bao gồm tệp tiêu đềlibpq-fe.hvà phải liên soi kèo bóng đá truoctran vớilibpqsoi kèo bóng đá truoctran.

28.1. Điều khiển soi kèo bóng đá truoctran cơ sở dữ liệu Chức năng

Các chức năng sau liên quan đến việc tạo soi kèo bóng đá truoctran với APostgreSQLMáy chủ phụ trợ. MỘT Chương trình ứng dụng có thể mở một số soi kèo bóng đá truoctran phụ trợ Đã có lúc. (Một lý do để làm điều đó là truy cập nhiều hơn một cơ sở dữ liệu.) Mỗi ​​soi kèo bóng đá truoctran được biểu diễn bằng mộtPGConnĐối tượng, được lấy từ hàmPQConnectDBhoặcPQSetDbLogin. Lưu ý rằng các chức năng này sẽ Luôn trả về soi kèo bóng đá truoctran con trỏ đối tượng không null, trừ khi có lẽ ở đó có quá ít bộ nhớ thậm chí để phân bổPGConnĐối tượng. Thepqstatus16177_16316

PQConnectDB

Tạo soi kèo bóng đá truoctran mới với máy chủ cơ sở dữ liệu.

PGConn *PQConnectDB (const char *Conninfo);

Hàm này mở soi kèo bóng đá truoctran cơ sở dữ liệu mới bằng cách sử dụng các tham số được lấy từ chuỗiConninfo. Không giống nhưPQSetDbLoginbên dưới, bộ tham số có thể được mở rộng mà không thay đổi chữ ký chức năng, Vì vậy, sử soi kèo bóng đá truoctran chức năng này (hoặc các chất tương tự không chặn của nóPQConnectStartPQConnectPoll17116_17175

Chuỗi truyền có thể trống để sử dụng tất cả các mặc định tham số hoặc nó có thể chứa soi kèo bóng đá truoctran hoặc nhiều tham số Cài đặt được phân tách bằng khoảng trắng. Mỗi cài đặt tham số đang ở dạngtừ khóa = value. Không gian xung quanh dấu hiệu bằng nhau là tùy chọn. Để viết soi kèo bóng đá truoctran giá trị trống hoặc giá trị chứa khoảng trống, bao quanh nó với các trích dẫn đơn, ví dụ:Từ khóa = 'A Value'. Trích dẫn đơn và dấu gạch chéo ngược trong Giá trị phải được thoát bằng soi kèo bóng đá truoctran dấu gạch chéo ngược, tức là,\ '\.

Các từ khóa tham số hiện được công nhận là:

host

Tên của máy chủ để soi kèo bóng đá truoctran với.Nếu điều này bắt đầu bằng soi kèo bóng đá truoctran dấu gạch chéo, nó Chỉ định giao tiếp miền đơn hơn là Truyền thông TCP/IP; Giá trị là tên của thư mục trong đó tệp ổ cắm được lưu trữ. Các hành vi mặc định khimáy chủkhông được chỉ định là soi kèo bóng đá truoctran với một miền Unix Ổ cắmin/TMP(hoặc bất kỳ ổ cắm nào thư mục đã được chỉ định khiPostgreSQLđã được xây dựng). TRÊN máy không có ổ cắm tên miền Unix, mặc định là soi kèo bóng đá truoctran vớiLocalhost.

hostaddr

Địa chỉ IP số của máy chủ để soi kèo bóng đá truoctran với. Cái này phải ở định dạng địa chỉ IPv4 tiêu chuẩn, ví dụ.,172.28.40.9. Nếu bạn máy hỗ trợ IPv6, bạn cũng có thể sử dụng chúng địa chỉ. Giao tiếp TCP/IP luôn được sử dụng khi soi kèo bóng đá truoctran chuỗi không trống được chỉ định cho điều này tham số.

sử soi kèo bóng đá truoctranhostaddrThay vào đó củamáy chủ19524_19815máy chủ19842_19882hostaddr, tên máy chủ Tra cứu xảy ra. Nếu nhưhostaddrđược chỉ định mà không cómáy chủ,, giá trị chohostaddrCung cấp địa chỉ từ xa. Khi Kerberos được sử dụng, soi kèo bóng đá truoctran Truy vấn tên ngược xảy ra để có được tên máy chủ cho Kerberos. Nếu cả haihosthostaddrlà được chỉ định, giá trị chohostaddrđưa ra địa chỉ từ xa; giá trị chohostIS bị bỏ qua, trừ khi Kerberos được sử soi kèo bóng đá truoctran, trong trường hợp đó Giá trị đó được sử soi kèo bóng đá truoctran để xác thực Kerberos. (Lưu ý rằng xác thực có khả năng thất bại nếulibpqđược thông qua a Tên máy chủ không phải là tên của máy tạihostaddr.) Ngoài ra,hostthay vìhostaddrđược sử dụng Xác định soi kèo bóng đá truoctran trong~/.pgass(xemPhần 28.12).

Không có tên máy chủ hoặc địa chỉ máy chủ,libpq21355_21527localhost.

Cổng

Số cổng để soi kèo bóng đá truoctran tại máy chủ máy chủ hoặc Tiện ích mở rộng tên tệp của ổ cắm cho Unix-Domain soi kèo bóng đá truoctran.

dbname

Tên cơ sở dữ soi kèo bóng đá truoctran. Mặc định là giống như Tên người dùng.

user

PostgreSQLNgười dùng Tên để soi kèo bóng đá truoctran như. Mặc định giống như Tên hệ điều hành của người dùng đang chạy ứng dụng.

Mật khẩu

Mật khẩu sẽ được sử soi kèo bóng đá truoctran nếu máy chủ yêu cầu Xác thực mật khẩu.

Connect_Timeout

Chờ tối đa để soi kèo bóng đá truoctran, tính bằng giây (viết như một chuỗi số nguyên thập phân). Không hoặc không được chỉ định có nghĩa là chờ vô thời hạn. Nó không được khuyến khích Sử dụng thời gian chờ ít hơn 2 giây.

Tùy chọn

Các tùy chọn dòng lệnh sẽ được gửi đến máy chủ.

tty

Bỏ qua (trước đây, được chỉ định nơi gửi đầu ra gỡ lỗi máy chủ).

SSLMode

Tùy chọn này xác định xem hoặc với cái gì Ưu tiên soi kèo bóng đá truoctranSSLsoi kèo bóng đá truoctran sẽ được đàm phán với máy chủ. Có bốn chế độ:vô hiệu hóasẽ chỉ cố gắng không được mã hóaSSLsoi kèo bóng đá truoctran;cho phép23869_23923SSLsoi kèo bóng đá truoctran, sau đó nếu điều đó thất bại, thử mộtSSLsoi kèo bóng đá truoctran;ưa thích(mặc định) sẽ đàm phán, thử trước soi kèo bóng đá truoctranSSLsoi kèo bóng đá truoctran, sau đó nếu điều đó thất bại, thử một thông thườngSSLsoi kèo bóng đá truoctran;Yêu cầuSẽ chỉ thửSSLsoi kèo bóng đá truoctran.

nếuPostgreSQLđược biên dịch mà không cần hỗ trợ SSL, sử soi kèo bóng đá truoctran tùy chọnYêu cầusẽ gây ra soi kèo bóng đá truoctran Lỗi, trong khi Tùy chọncho phépưa thíchsẽ là Được chấp nhận nhưnglibpqTrên thực tế sẽ không cố gắngSSLsoi kèo bóng đá truoctran.

aboressl

Tùy chọn này không được ủng hộ theo hướngSSLModeCài đặt.

Nếu được đặt thành 1, anSSLsoi kèo bóng đá truoctran với máy chủ là bắt buộc (điều này tương đương vớiSSLMode Yêu cầu).libpqSau đó sẽ từ chối soi kèo bóng đá truoctran nếu máy chủ không chấp nhậnSSLsoi kèo bóng đá truoctran. Nếu đặt thành 0 (mặc định),libpqSẽ thương lượng Loại soi kèo bóng đá truoctran với máy chủ (tương đương vớiSSLMode ưa thích26086_26140PostgreSQLđược tổng hợp với Hỗ trợ SSL.

krbsrvname

Tên dịch vụ của Kerberos sẽ sử soi kèo bóng đá truoctran khi xác thực với Kerberos 5. Điều này phải khớp với tên dịch vụ được chỉ định trong cấu hình máy chủ cho Kerberos xác thực để thành công. (Xem thêmPhần 20.2.3.)

Dịch vụ

Tên dịch vụ để sử soi kèo bóng đá truoctran cho các tham số bổ sung. Nó chỉ định tên dịch vụ trongpg_service.confgiữ tham số soi kèo bóng đá truoctran bổ sung. Điều này cho phép các ứng dụng chỉ chỉ định tên dịch vụ như vậy Các tham số soi kèo bóng đá truoctran có thể được duy trì tập trung. Nhìn thấyPostgreSQL: Tài liệu:.

Nếu bất kỳ tham số nào không được xác định, thì Biến môi trường tương ứng (xemPhần 28.11) được kiểm tra. Nếu biến môi trường cũng không được đặt, sau đó Các mặc định tích hợp được chỉ định được sử soi kèo bóng đá truoctran.

PQSetDbLogin

Tạo soi kèo bóng đá truoctran mới với máy chủ cơ sở dữ liệu.

PGConn *pqsetdblogin (const char *pghost,
                     const char *pgport,
                     const char *pgoptions,
                     const char *pgtty,
                     const char *dbname,
                     const char *đăng nhập,
                     const char *pwd);

Đây là tiền thân củaPQConnectDBVới soi kèo bóng đá truoctran bộ cố định tham số. Nó có cùng chức năng ngoại trừ Thiếu tham số sẽ luôn luôn có các giá trị mặc định. Viếtnull28430_28532

PQSetDB

Tạo soi kèo bóng đá truoctran mới với máy chủ cơ sở dữ liệu.

PGConn *PQSetDB (char *pghost,
                char *pgport,
                char *pgoptions,
                char *pgtty,
                char *dbname);

Đây là soi kèo bóng đá truoctran macro gọiPQSetDbLoginvới các con trỏ null choĐăng nhậpPWDtham số. Nó được cung cấp cho Khả năng tương thích ngược với các chương trình rất cũ.

PQConnectStart
PQConnectPoll

Tạo a soi kèo bóng đá truoctran với máy chủ cơ sở dữ liệu trong một số chặn thái độ.

PGConn *PQConnectStart (const char *Conninfo);
29724_29782

Hai chức năng này được sử dụng để mở soi kèo bóng đá truoctran với A máy chủ cơ sở dữ liệu sao cho chủ đề của ứng dụng của bạn về Thực thi không bị chặn trên I/O từ xa trong khi làm như vậy. Điểm của phương pháp này là sự chờ đợi cho I/O Hoàn thành có thể xảy ra trong vòng lặp chính của ứng dụng, thay vào đó hơn xuống bên trongPQConnectDB, và vì vậy ứng soi kèo bóng đá truoctran có thể Quản lý hoạt động này song song với các hoạt động khác các hoạt động.

soi kèo bóng đá truoctran cơ sở dữ liệu được tạo bằng các tham số được lấy từ chuỗiConninfo,, được truyền cho30487_30503. Chuỗi này ở cùng định dạng như được mô tả ở trên choPQConnectDB.

KhôngPQConnectStartcũng khôngPQConnectPollWill khối, miễn là soi kèo bóng đá truoctran số hạn chế được đáp ứng:

  • ThehostaddrhostTham số được sử dụng một cách thích hợp để đảm bảo tên và tên đảo ngược đó Truy vấn không được thực hiện. Xem tài soi kèo bóng đá truoctran của những điều này tham số dướiPQConnectDBở trên để biết chi tiết.

  • Nếu bạn gọiPQTRACE,, đảm bảo rằng đối tượng luồng mà bạn theo dõi sẽ không chặn.

  • Bạn đảm bảo rằng ổ cắm phù hợp trạng thái trước khi gọiPQConnectPoll, như mô tả dưới.

Để bắt đầu yêu cầu soi kèo bóng đá truoctran không chặn, hãy gọiConn = PQConnectStart ("Connection_info_String"). Nếu nhưConnlà null, sau đólibpqđã không thể phân bổ mớiPGConnCấu trúc. Nếu không, soi kèo bóng đá truoctran hợp lệPGConnCon trỏ được trả về (mặc dù chưa đại diện cho một hợp lệ soi kèo bóng đá truoctran với cơ sở dữ liệu). Khi trở về từPQConnectStart, gọistatus = pqstatus (Conn). Nếu nhưtrạng tháibằngConnection_Bad, PQConnectStartđã thất bại.

nếuPQConnectStartThành công, giai đoạn tiếp theo là thăm dò ý kiếnlibpqđể nó có thể tiến hành Trình tự soi kèo bóng đá truoctran. Sử dụngPQSocket (Conn)Để có được bộ mô tả của ổ cắm bên dưới soi kèo bóng đá truoctran cơ sở dữ liệu. Vòng lặp Do đó: nếuPQConnectPoll (Conn)Trả về lần cuốipgres_polling_reading, đợi cho đến khi ổ cắm đã sẵn sàng để đọc (như được chỉ ra bởiselect (), poll ()hoặc hàm hệ thống tương tự). Sau đó gọiPQConnectPoll (Conn)soi kèo bóng đá truoctran lần nữa. Ngược lại, nếu nhưPQConnectPoll (Conn)Cuối cùng đã trả vềPGRES_POLLING_WRITY,, Chờ cho đến khi ổ cắm sẵn sàng để viết, sau đó gọiPQConnectPoll (Conn)soi kèo bóng đá truoctran lần nữa. Nếu bạn chưa gọiPQConnectPoll, tức là, ngay sau khi Gọi đếnPQConnectStart,, hành xử như thể nó đã trả về lần cuốiPGRES_POLLING_WRITY. Tiếp tục vòng lặp này cho đến khiPQConnectPoll (Conn)returnPGRES_POLLING_FAILED,, Cho biết quy trình soi kèo bóng đá truoctran đã thất bại hoặcpgres_polling_ok, chỉ ra soi kèo bóng đá truoctran đã được thực hiện thành công.

34267_34365pqstatus. Nếu điều này choConnection_Bad, sau đó là soi kèo bóng đá truoctran thủ tục đã thất bại; Nếu nó choConnection_ok, thì soi kèo bóng đá truoctran là sẵn sàng. Cả hai trạng thái này đều có thể phát hiện như nhau từ Giá trị trả về củaPQConnectPoll34772_35077

Connection_started

chờ soi kèo bóng đá truoctran được thực hiện.

Connection_Made

soi kèo bóng đá truoctran OK; chờ gửi.

Connection_Awaiting_Response

Đang chờ phản hồi từ máy chủ.

Connection_Auth_ok

nhận được xác thực; chờ đợi phụ trợ Khởi động để hoàn thành.

Connection_SSL_startup

Đàm phán mã hóa SSL.

Connection_SetEnv

Đàm phán tham số điều khiển môi trường Cài đặt.

Lưu ý rằng, mặc dù các hằng số này sẽ vẫn còn ( để duy trì khả năng tương thích), soi kèo bóng đá truoctran ứng dụng nên Không bao giờ dựa vào những điều này xảy ra theo soi kèo bóng đá truoctran thứ tự cụ thể, hoặc Tất cả, hoặc về tình trạng luôn là soi kèo bóng đá truoctran trong số đó giá trị được ghi lại. soi kèo bóng đá truoctran ứng dụng có thể làm soi kèo bóng đá truoctran cái gì đó như cái này:

Switch (pqstatus (Conn))

    Case Connection_started:
        Phản hồi = "soi kèo bóng đá truoctran ...";
        phá vỡ;

    Case Connection_Made:
        Phản hồi = "soi kèo bóng đá truoctran với máy chủ ...";
        phá vỡ;
.
.
.
    mặc định:
        Phản hồi = "soi kèo bóng đá truoctran ...";

TheConnect_TimeoutTham số soi kèo bóng đá truoctran bị bỏ qua khi sử dụngPQConnectPoll; nó là ứng dụng trách nhiệm quyết định xem soi kèo bóng đá truoctran lượng quá mức của Thời gian đã trôi qua. Nếu không thì,PQConnectStarttheo sau làPQConnectPollVòng lặp là tương đương vớiPQConnectDB.

Lưu ý rằng nếuPQConnectStartTrả về soi kèo bóng đá truoctran người không null con trỏ, bạn phải gọipqfinishKhi bạn kết thúc với nó, để xử lý cấu trúc và bất kỳ liên kết nào Khối bộ nhớ. Điều này phải được thực hiện ngay cả khi soi kèo bóng đá truoctran cố gắng thất bại hoặc bị bỏ rơi.

PQConnDefaults

Trả về các tùy chọn soi kèo bóng đá truoctran mặc định.

PQConnInFooption *PQConnDefaults (void);

Cấu trúc typedef

    từ khóa *từ khóa;   / * Từ khóa của tùy chọn */
    char *envvar;    / * Tên biến môi trường dự phòng */
    char *biên soạn;  / * Dự phòng được biên dịch trong giá trị mặc định */
    char *val;       / * Giá trị hiện tại của tùy chọn hoặc null */
    Nhãn char *;     / * Nhãn cho trường trong hộp thoại Connect */
    char *vua;  /* Ký tự để hiển thị cho trường này
                          Trong một hộp thoại soi kèo bóng đá truoctran. Giá trị là:
                          "" Hiển thị giá trị đã nhập như là
                          "*" Trường mật khẩu - ẩn giá trị
                          Tùy chọn gỡ lỗi "D" - không hiển thị theo mặc định */
    int phân tán;  / * Kích thước trường trong các ký tự cho hộp thoại */
 PQConnInFooption;

Trả về mảng tùy chọn soi kèo bóng đá truoctran. Điều này có thể được sử dụng Để xác định tất cả có thểPQConnectDBTùy chọn và dòng điện của chúng giá trị mặc định. Giá trị trả về chỉ vào soi kèo bóng đá truoctran mảngPQConninFooptionCấu trúc, soi kèo bóng đá truoctran thúc bằng một mục có nullTừ khóaCon trỏ. Con trỏ null là trả lại nếu bộ nhớ không thể được phân bổ. Lưu ý rằng Giá trị mặc định hiện tại (ValTrường) sẽ phụ thuộc vào các biến môi trường và các biến khác bối cảnh. Người gọi phải xử lý dữ liệu tùy chọn soi kèo bóng đá truoctran như chỉ đọc.

Sau khi xử lý mảng tùy chọn, hãy giải phóng nó bằng cách vượt qua nó đếnPQConninFofree. Nếu như Điều này không được thực hiện, soi kèo bóng đá truoctran lượng nhỏ bộ nhớ bị rò rỉ cho Mỗi cuộc gọi đếnPQConnDefaults.

pqfinish

Đóng soi kèo bóng đá truoctran với máy chủ. Cũng giải phóng bộ nhớ Được sử dụng bởiPGConnĐối tượng.

void pqfinish (pgconn *Conn);

Lưu ý rằng ngay cả khi soi kèo bóng đá truoctran máy chủ không cố (như được chỉ ra bởipqstatus), Ứng soi kèo bóng đá truoctran nên gọipqfinishĐể giải phóng bộ nhớ được sử soi kèo bóng đá truoctran bởiPGConnĐối tượng. ThePGConnCon trỏ không được sử soi kèo bóng đá truoctran lại sau đópqfinishđã được gọi điện.

pqreset

Đặt lại kênh truyền thông cho máy chủ.

40895_40926

Hàm này sẽ đóng soi kèo bóng đá truoctran với máy chủ và cố gắng thiết lập lại một soi kèo bóng đá truoctran mới với cùng một Máy chủ, sử dụng tất cả các tham số giống nhau được sử dụng trước đây. Điều này có thể hữu ích cho việc khôi phục lỗi nếu hoạt động soi kèo bóng đá truoctran bị mất.

pqresetstart
pqresetpoll

Đặt lại kênh truyền thông cho máy chủ, trong A cách không chặn.

int pqresetstart (pgconn *Conn);
41664_41720

Các chức năng này sẽ đóng soi kèo bóng đá truoctran với máy chủ và cố gắng thiết lập lại một soi kèo bóng đá truoctran mới với cùng một máy chủ, sử dụng tất cả các tham số giống nhau trước đây đã sử dụng. Điều này có thể hữu ích cho việc khôi phục lỗi nếu hoạt động soi kèo bóng đá truoctran bị mất. Chúng khác vớipqreset(ở trên) trong đó họ hành động trong soi kèo bóng đá truoctran cách không chặn. Các chức năng này bị giống nhau Hạn chế làPQConnectStartPQConnectPoll.

Để bắt đầu đặt lại soi kèo bóng đá truoctran, hãy gọipqresetstart. Nếu nó trở lại 0, Đặt lại đã thất bại. Nếu nó trả về 1, hãy bỏ phiếu đặt lại bằng cách sử soi kèo bóng đá truoctranpqresetpollTrong chính xác theo cách mà bạn sẽ tạo soi kèo bóng đá truoctran bằng cách sử dụngPQConnectPoll.