libpq库使用
目录
- 1 介绍
- 2 基本使用
1 介绍
libpq
是PostgreSQL
的官方C
接口库。
2 基本使用
#include <libpq-fe.h>//将内容写入到数据库中
const char *conninfo = "host=10.129.21.35 port=5732 dbname=db_aaa user=ssff_user password=ppp";
PGconn *conn = PQconnectdb(conninfo);if (PQstatus(conn) != CONNECTION_OK) {COM_WRITELOG(common::COMLOG_FATAL, "connect to pgdb failed!");PQfinish(conn);return;
}// 开始事务(可选,但推荐批量插入时使用)
PGresult *res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK) {COM_WRITELOG(common::COMLOG_FATAL, "BEGIN transaction failed: %s", PQerrorMessage(conn));PQclear(res);PQfinish(conn);return;
}
PQclear(res);// 遍历数据并插入
for (auto [ruleid1, log_cnt1] : map_ruleid_cnt) {std::string table_name1 = "XX";int data_cnt = map_tablename_cnt[table_name1];std::string fl_pipeline = "XX";std::string check_level = "XX";// 构造完整的 SQL 插入语句(注意字符串转义)std::string sql = "INSERT INTO guocheng_check_quality (""date, fl_planid, fl_plan_type, fl_taskid, fl_work_stage, ""fl_pipeline, fl_worker_name, check_taskid, check_task_type, ""check_ruleid, check_level, check_log_cnt, check_data_cnt) ""VALUES (""'" + date_str + "', " // date"'" + plan_id + "', " // fl_planid"'" + plan_type + "', " // fl_plan_type"'" + ctask_id + "', " // fl_taskid"'" + fl_work_stage + "', " // fl_work_stage"'" + fl_pipeline + "', " // fl_pipeline(空字符串)"'" + worker_name + "', " // fl_worker_name"'" + std::to_string(check_taskid) + "', " // check_taskid"'" + std::to_string(check_task_type) + "', " // check_task_type"'" + ruleid1 + "', " // check_ruleid"'" + check_level + "', " // check_level"" + std::to_string(log_cnt1) + ", " // check_log_cnt"" + std::to_string(data_cnt) + ")"; // check_data_cnt// 执行 SQLres = PQexec(conn, sql.c_str());// 检查执行结果if (PQresultStatus(res) != PGRES_COMMAND_OK) {COM_WRITELOG(common::COMLOG_FATAL, "insert data failed! SQL: [%s], errmsg: [%s]", sql.c_str(), PQerrorMessage(conn));PQclear(res);PQexec(conn, "ROLLBACK"); // 回滚事务PQfinish(conn);return;}PQclear(res);
}// 提交事务
res = PQexec(conn, "COMMIT");
if (PQresultStatus(res) != PGRES_COMMAND_OK) {COM_WRITELOG(common::COMLOG_FATAL, "COMMIT failed: %s", PQerrorMessage(conn));PQclear(res);PQfinish(conn);return;
}
PQclear(res);// 关闭连接
PQfinish(conn);