PostgreSQL libpq开发入门

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 简单入门C语言开发基于PostgreSQL libpq应用

开发工具:Clion远程

pg版本:14.9

编译PostgreSQL时使用make world & make install-world即可编译安装libpq库。

#include <stdio.h>#include <stdlib.h>#include "libpq-fe.h"staticvoidexit_nicely(PGconn*conn) {
PQfinish(conn);
exit(1);
}
intmain(intargc, char**argv) {
constchar*conninfo;
PGconn*conn;
PGresult*res;
intnFields;
inti, j;
if(argc>1)
conninfo=argv[1];
elseconninfo="dbname=postgres user=postgres password=123456 host=localhost";
conn=PQconnectdb(conninfo);
if(PQstatus(conn) !=CONNECTION_OK) {
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
    }
res=PQexec(conn, "SELECT pg_catalog.set_config('search_path','',false)");
if(PQresultStatus(res) !=PGRES_TUPLES_OK) {
fprintf(stderr,"SET failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
    }
PQclear(res);
res=PQexec(conn, "BEGIN");
if(PQresultStatus(res) !=PGRES_COMMAND_OK) {
fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
    }
PQclear(res);
res=PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
if(PQresultStatus(res) !=PGRES_COMMAND_OK) {
fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
    }
PQclear(res);
res=PQexec(conn, "FETCH ALL in myportal");
if(PQresultStatus(res) !=PGRES_TUPLES_OK) {
fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
    }
nFields=PQnfields(res);
for(i=0; i<nFields; i++)
printf("%-15s", PQfname(res, i));
printf("\n\n");
for(i=0; i<PQntuples(res); i++) {
for(j=0; j<nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
    }
PQclear(res);
res=PQexec(conn, "CLOSE myportal");
PQclear(res);
res=PQexec(conn, "END");
PQclear(res);
PQfinish(conn);
return0;
}

构建用的cmake文件

cmake_minimum_required(VERSION3.24)
project(pg_testC)
set(CMAKE_C_STANDARD11)
set(INC_DIR/usr/local/pgsql14/include)
set(LINK_DIR/usr/local/pgsql14/lib)
include_directories(${INC_DIR})
link_directories(${LINK_DIR})
add_executable(pg_testtestlibpg.c)
target_link_libraries(pg_testpq)
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
关系型数据库 数据库 C语言
PostgreSQL服务端开发学习 -- Datum
在使用C语言开发PostgreSQL后端、客户端应用时,Datum无处不在,所以必须要对Datum有很清楚的了解。
|
6月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL从入门到精通 - 第40讲:数据库不完全恢复
PostgreSQL从入门到精通 - 第40讲:数据库不完全恢复
208 1
|
6月前
|
存储 SQL 人工智能
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)(下)
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)
|
关系型数据库 C语言 PostgreSQL
PostgreSQL服务端开发学习 --- 常用结构及宏定义1
本篇主要讲解使用C语言开发PostgreSQL服务端应用(libpq、自定义函数、扩展)常用到的结构及宏定义。
|
3月前
|
SQL 存储 关系型数据库
新手如何入门学习PostgreSQL?
新手如何入门学习PostgreSQL?
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
364 0
|
6月前
|
关系型数据库 数据库 PostgreSQL
|
关系型数据库 C语言 PostgreSQL
PostgreSQL服务端开发学习 -- fmgr.h
fmgr按官方的解释就是Postgres函数管理器和函数调用接口,在使用C语言开发PostgreSQL后端应用时,所以与backend交互时必须遵循fmgr.h中定义的一些规范。
|
6月前
|
存储 SQL 关系型数据库
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)(上)
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)
|
6月前
|
Oracle 关系型数据库 数据库
PostgreSQL从入门到精通教程 - 第42讲:pg_rman部署与使用
PostgreSQL从入门到精通教程 - 第42讲:pg_rman部署与使用
174 1