天天看點

PostgreSQL libpq學習指南二

PostgreSQL libpq學習指南二

連接配接狀态函數

PQdb

傳回連接配接的資料庫名稱

PQuser

傳回連接配接的使用者名稱

PQpass

傳回連接配接的使用者密碼

如果連接配接密碼沒有被提供,那麼将會嘗試從 password_file 檔案中擷取。

PQhost

傳回連接配接的伺服器主機名稱

PQhostaddr

傳回連接配接的伺服器IP位址

PQport

傳回連接配接伺服器的端口

PQtty

傳回連接配接的DEBUG 終端資訊

PQoptions

傳回指令行傳遞的參數資訊

PQstatus

傳回連接配接的狀态資訊

示例:

#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"

int
main(int argc, char **argv)
{
        const char *conninfo; //定義連接配接資訊
        PGconn     *conn; //連接配接資料庫傳遞參數
        if (argc > 1)
                conninfo = argv[1];
        else
                conninfo = "dbname = postgres";

        /* 連接配接資料庫字元串 */
        conn = PQconnectdb(conninfo);

        /*檢查資料庫是否連接配接成功 */
        if (PQstatus(conn) != CONNECTION_OK)
        {
                fprintf(stderr, "連接配接資料庫失敗: %s",
                                PQerrorMessage(conn));
        }else
        {
                printf("資料庫名稱: %s\n",PQdb(conn));
                printf("資料庫使用者名稱: %s\n",PQuser(conn));
                printf("資料庫使用者密碼: %s\n",PQpass(conn));
                printf("資料庫端口: %s\n",PQport(conn));
                printf("資料庫主機名: %s\n",PQhost(conn));
                printf("資料庫IP位址: %s\n",PQhostaddr(conn));
        }

        return 0;
}
      

  編譯:

[postgres@pgserver12 libpqtest]$ make
make -C ../postgresql-12.5/src/backend generated-headers
make[1]: Entering directory `/home/postgres/postgresql-12.5/src/backend'
make -C catalog distprep generated-header-symlinks
make[2]: Entering directory `/home/postgres/postgresql-12.5/src/backend/catalog'
make[2]: Nothing to be done for `distprep'.
make[2]: Nothing to be done for `generated-header-symlinks'.
make[2]: Leaving directory `/home/postgres/postgresql-12.5/src/backend/catalog'
make -C utils distprep generated-header-symlinks
make[2]: Entering directory `/home/postgres/postgresql-12.5/src/backend/utils'
make[2]: Nothing to be done for `distprep'.
make[2]: Nothing to be done for `generated-header-symlinks'.
make[2]: Leaving directory `/home/postgres/postgresql-12.5/src/backend/utils'
make[1]: Leaving directory `/home/postgres/postgresql-12.5/src/backend'
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -I../postgresql-12.5/src/interfaces/libpq -I../postgresql-12.5/src/include  -D_GNU_SOURCE -I/usr/include/libxml2   -c -o test.o test.c
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 test.o -L../postgresql-12.5/src/port -L../postgresql-12.5/src/common -L../postgresql-12.5/src/common -lpgcommon -L../postgresql-12.5/src/port -lpgport -L../postgresql-12.5/src/interfaces/libpq -lpq   -Wl,--as-needed -Wl,-rpath,'/data/pg12.5/lib',--enable-new-dtags  -lpgcommon -lpgport -lpthread -lxslt -lxml2 -lpam -lssl -lcrypto -lz -lreadline -lrt -lcrypt -ldl -lm  -o test
[postgres@pgserver12 libpqtest]$ 
      

 執行:

#預設連接配接
[postgres@pgserver12 libpqtest]$ ./test 
資料庫名稱: postgres
資料庫使用者名稱: postgres
資料庫使用者密碼: 
資料庫端口: 5532
資料庫主機名: /tmp
資料庫IP位址: 
#指定連接配接字元串
[postgres@pgserver12 libpqtest]$ ./test  postgresql://pgserver12:5532/postgres
資料庫名稱: postgres
資料庫使用者名稱: postgres
資料庫使用者密碼: 
資料庫端口: 5532
資料庫主機名: pgserver12
資料庫IP位址: 10.10.20.60
      

  這裡需要注意的是 host 和 hostaddr不一樣,在任何條件下,隻要主機名能夠通過正常的DNS解析,那麼hostaddr将始終以IP位址的形式出現,如上。

繼續閱讀