PostgreSQL libpq学习指南二
首页 专栏 数据库 文章详情
0

PostgreSQL libpq学习指南二

晟数学院 发布于 17小时前

连接状态函数

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地址的形式出现,如上。

数据库 sql postgresql
阅读 31 更新于 17小时前
赞 收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
晟数学院

荟萃业内名师,培养数据英才!

33 声望
38 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
晟数学院

荟萃业内名师,培养数据英才!

33 声望
38 粉丝
关注作者
宣传栏

连接状态函数

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地址的形式出现,如上。