尝试使用libpq从C语言连接到PostgreSQL数据库
本文将介绍使用 libpq 连接到 PostgreSQL 数据库的程序编写方法。
中文翻译:假设环境使用CentOS 7或8和PostgreSQL 9.6及以上版本,并且已经能够连接到PostgreSQL。如果尚未安装或配置PostgreSQL,请参考这篇文章(安装方法)和这篇文章(配置非本地主机连接的方式)。
-
- 安装GCC和PostgreSQL的头文件和开发库。
对于CentOS 7上的PostgreSQL 11及更高版本,需要安装EPEL和SCL存储库。请参考这篇文章中的原因。
对于CentOS 7:
$ sudo yum install -y epel-release centos-release-scl
(省略)
完成安装!
接下来,安装GCC和PostgreSQL的头文件和开发库。
$ sudo yum install -y gcc postgresql13-devel
(省略)
安装完成!
包含的数字13是PostgreSQL的版本号。请根据您的环境修改此版本号。版本号9.6之前是包含两个数字的版本号,去掉点号变成例如96。
创建程序。
程序的内容是输出数据库列表。错误处理只做了最基本的内容以确定原因。
test_libpq.c
#include
#include
#include
int
main(void)
{
const char *conninfo;
PGconn *conn;
PGresult *res;
int i;
conninfo = “host=localhost port=5432 dbname=postgres user=postgres password=password”;
conn = PQconnectdb(conninfo);
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, “%s”, PQerrorMessage(conn));
exit(1);
}
res = PQexec(conn, “SELECT datname FROM pg_database”);
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, “%s”, PQerrorMessage(conn));
exit(1);
}
for (i = 0; i < PQntuples(res); i++)
{
printf(“%s\n”, PQgetvalue(res, i, 0));
}
PQclear(res);
PQfinish(conn);
return 0;
}
变量conninfo使用空格分隔的参数名=值格式来指定连接目标。参数host表示连接目标的主机,port表示端口,dbname表示数据库名称,user表示用户名,password表示密码。请根据您的环境修改此部分内容。
构建程序。
$ gcc -Wall -I/usr/pgsql-13/include -L/usr/pgsql-13/lib -lpq -o test_libpq test_libpq.c
选项-I和-L分别指定了PostgreSQL头文件和开发库的存储路径。包含的数字13是PostgreSQL的版本号。请根据您的环境修改此部分内容。
如果没有输出错误消息并且生成了可执行文件test_libpq,则构建程序成功。
运行程序。
$ ./test_libpq
postgres
template1
template0
如果没有输出错误消息并且输出了数据库列表,则运行程序成功。
以上是程序编写完成。