更新时间:2026-07-28 GMT+08:00
连接数据库
连接到数据库是使用libpq开发应用程序的第一步。此时用户可以使用PQconnectdb或PQsetdbLogin函数来建立与数据库服务器的连接。
连接所用的连接串即conninfo有以下两种形式:
- 所需的连接参数直接写为[name=value][...]的形式,多个参数之间使用空格隔开,例如:
"dbname=%s port=%s host=%s application_name=%s connect_timeout=%d sslmode=%s user=%s password=%s connectMode=%s tenantName=%s tenantPassword=%s"
- 连接串写为postgresql://[userspec@][hostspec][/dbname][?paramspec]的形式,其中userspec = user[:password],hostspec = [host][:port][,...],paramspec = name=value[&...],例如:
"postgresql://HOST?dbname=postgres&port=PORT&user=USER&password=******"
以开发源程序testlibpq.c为例(完整示例请参考数据库建连、执行SQL并返回结果):
/*
* 说明: testlibpq.c源程序,提供libpq基本且常见的使用场景。
* 使用libpq提供的PQconnectdb、PQexec、PQntuples、PQfinish等接口实现数据库建连,执行sql,获取返回结果以及资源清理。
* 头文件,自定义函数请参考完整示例。
*/
/* 此处user、passwd等变量应从环境变量或配置文件读取,环境变量需用户自己按需配置;非环境变量情况下可直接赋值字符串 */
const char conninfo[1024];
PGconn *conn;
PGresult *res;
int nFields;
int i,j;
char *passwd = getenv("EXAMPLE_PASSWD_ENV");
char *port = getenv("EXAMPLE_PORT_ENV");
char *host = getenv("EXAMPLE_HOST_ENV");
char *username = getenv("EXAMPLE_USERNAME_ENV");
char *dbname = getenv("EXAMPLE_DBNAME_ENV");
/*
char *tenant_conn_mode = getenv("EXAMPLE_TENANT_MODE_ENV");
char *tenant_username = getenv("EXAMPLE_TENANT_USERNAME_ENV");
char *tenant_passwd = getenv("EXAMPLE_TENANT_PASSWD_ENV");
*/
/*
* 用户在命令行上提供了conninfo字符串的值时使用该值
* 否则环境变量或者所有其它连接参数
* 都使用缺省值。
*/
if (argc > 1)
strcpy(conninfo, argv[1]);
else
sprintf(conninfo,
"dbname=%s port=%s host=%s application_name=test connect_timeout=5 sslmode=allow user=%s password=%s",
dbname, port, host, username, passwd);
/* 连接数据库 */
conn = PQconnectdb(conninfo);
/* 检查后端连接成功建立 */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
exit_nicely(conn);
} 注意事项:
- 敏感信息(密码等)不建议硬编码,应从环境变量、配置文件或密钥管理系统获取;
- 建立连接后立即通过PQstatus判断连接状态,并处理错误,提升程序健壮性。
父主题: 开发步骤