开源软件的一个好处是可以根据需要修改程序代码。如果程序后台使用PostgreSQL数据库,可以很容易用各种语言对其进行访问。本文作为系列文章的第一篇,会陆续介绍C、C++、PHP、Tcl、Python及Perl等编程语言对PostgreSQL的访问方法。  需要说明的是,本文不太适合完全没有编程经验的读者。不过只要读者有基本的SQL知识,以及懂得至少一种编程语言即可看懂。也许读者正在使用的系统是Linux,但是只要使用的客户端API接口在其他系统可用,则程序代码不需更改即可在其他操作系统上正常使用。本文所示的代码全部基于Postgre 9.1,是目前最新的稳定版本,已经安装并经过测试。在本文的操作环境中,客户端与服务端位于不同的计算机,但位于同一局域网内,这种情况下可以在客户端通过命令gpsql -U postgre -h x.x.x.x很容易地连接到服务端。

首先要确保在客户端机器上有安装软件的权限,并且最好确保当前使用的数据库只做当前测试用,以免任何因不小心的操作导致重要数据的损坏。

C语言接口

在与数据库连接方面,C语言是一种常用语言,许多数据库都是用C写的。该语言高效灵活,因此如果想要写一款客户端接口,不管是仅仅包含控制台还是基于GUI的,并且不想用到浏览器,C语言也许是最好的选择。

连接C语言与Postgres使用的库名为libpq,它与PostgreSQL源码树绑定在一起。如果安装数据库系统时使用的是二进制文件而不是从源码编译安装,libpq可被单独安装,但也要记得需要使用选项-dev package(或-devel,取决于Linux系统的版本)。在Debian及其分发版上,安装libpq的命令为 #aptitude install libpq-dev。在基于RedHat的系统上,如CentOS,可以在postgresqlxx-libs包中找到libpq,其中xx为主要和次要版本号。因此要连接到PostgreSQL 9.1数据库,如果使用Fedora16,则需要安装postgresql91-lib或postgresql-devel。由于RHEL/CentOS用户大多使用Postgres库,导致程序的名称可能会有一些不同,而且由于Fedora用户能够使用更多最新的包,因此仅仅在使用一个旧版本时才需要第三方库。简而言之,任何支持PostgreSQL的系统均有其可用的libpq。

除了C语言,libpq同时也是C++、Perl和Tcl的API引擎,提供基本的函数对数据库进行连接、查询和修改。许多常用的函数都包含“PQ”前缀,如PQconnectdb或PQerrormessage。更多示例可查看PostgreSQL文档或查看src/test/examples。在C程序文件中,包含libpq-fe.h头文件并在编译时添加相应的链接标记-lpq。

安装并设置好之后,要做的第一件事就是连接数据库。PQconnectdb()函数带一个char *conninfo格式的参数,参数格式如dbname=[database_name],当然也可以是其他内容,只要格式对即可,最常用的关键字为host,hostaddr(numeric格式,以避免无用的DNS查询),port,user,password与sslmode。如果不使用参数,则会使用默认选项。假设服务器地址为192.168.0.101,username为postgres,数据库名为testdb1,尝试连接数据库的代码如下所示:

#include #include int main(int argc,char argv[]){    const char *conninfo;    PGconn *conn;    if (argc > 1)        conninfo = argc[1];    else    {        printf("Not enough arguments, exiting...");        return 1;    }    conn = PQconnectdb(conninfo);    /*Check to see how I did */    if(PQstatus(conn) = CONNECTION_OK)        printf("Connection succeeded.n");    else    {        /*Do something to deal with the error*/    }}

将代码保存为testlibpq并编译,编译后的程序用法如下:

$ testlibpg "hostaddr=192.168.0.101 user=postgres dbname=testdb1"

如果不出错误,会在屏幕上看到提示“Connection succeeded.”,表示连接数据库成功,不过上文并没有什么实际用处。那么何为实际用处呢----对数据进行查询,但这里先介绍如何断开连接,即调用PQfinish,该函数只有一个参数PGconn *conn,并返回void。

PQexec函数执行查询,参数为PGconn *conn与const char *command,返回一个PGresult类型的对象。在如下示例中,声明一个PGresult变量,并向服务器发送一个命令。读者可自行编写检查连接与否以及错误处理的代码。

PGresult *res;   res = PQexec(conn, "SELECT * FROM mydatabase");   PQclear(res);

显然这段代码无法编译,只是为了向读者展示libpq库提供的功能,而不是直接提供可用代码。不过在这段代码中,res包含了查询结果,读者可以任意对其进行解析。PQresultStatus可以查询命令的状态,该函数返回PGRES_COMMAND_OK或 PGRES_FATAL_ERROR.。可在PostgreSQL项目页面找到exec函数的一个综合列表。

下面介绍一些有用的函数,例如,PQntuples函数将给定的res作为参数,以整数类型返回表中列的数量。如果查询的状态为PGRES_TUPLES_OK,则它以PGresult对象为参数,并返回一个整型值。PQnfields函数给出每行的列数。PQfname函数返回与某数字关联的列的名字,PQfnumber函数功能则完全相反。要得到某一单元的值,需要将PGresult以及单元的列号和行号传给PQgetvalue函数。

可以看到这些函数都比较简单,但PQexec不能同时处理多个SQL命令,因为该函数只能返回一个结构,如果有多个命令,则只能返回最后一个命令的结果。另一个不足是,PQexec在执行一个命令时会一直等到命令返回,因此读者在使用该命令遇到阻塞执行时要分外小心。如果这些不足影响到读者用户的使用,可以使用其它函数代替,如PQsendQuery和PQgetResult等,可使用这些函数来进行异步查询处理

postgresql c语言,任意语言访问PostgreSQL:C语言接口相关推荐

  1. 任意编程语言访问PostgreSQL:C++接口

    今天将介绍如何使用C++访问PostgreSQL. 官方PostgreSQL客户端的C++接口API称为libpqxx,但没有与PostgreSQL源码进行绑定,用户可以从产品分发库或单独下载进行安装 ...

  2. python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2

    python访问PostgreSQL数据库之连接库Psycopg2 作者:佣工7001 由于要在python访问PostgreSQL数据库,需要一个符合DB-API的连接库.通过搜索,锁定两个候选库: ...

  3. c语言任意输入两点坐标,c语言题目急急急!给定平面任意两点的坐标(x1,y1)和(x2,? 爱问知识人...

    [问题描述]给定平面任意两点的坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留两位小数).要求求距离的运算单独放在一个函数中,然后在main函数中调用. [输入形式]输入两点的坐标(x1, ...

  4. c语言任意位数逆序数,C语言求助!一个三位数的逆序数,总是编不对

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include int main() { int n,a,b,c,sum,ge,shi,bai; printf(&q ...

  5. Serverless 解惑——函数计算如何访问 PostgreSQL 数据库

    函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...

  6. 函数计算如何访问 PostgreSQL 数据库

    函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...

  7. 外网访问postgresql设置

    安装PostgreSQL数据库之后,默认只能本地访问连接.如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相应的配置. 1.修改postgresql.conf文件 在安装目录下dat ...

  8. Oracle配置dblink访问PostgreSQL

    Oracle dblink的底层是通过ODBC连接PostgreSQL执行SQL的,需安装unixODBC和PostgreSQL ODBC驱动(它们的配置文件是:odbcinst.ini和odbc.i ...

  9. 配置RODBC访问PostgreSQL数据库

    走了不少弯路,总算把这个问题搞定,贴到这里分享给大家. 1:下载安装PostgreSQL的ODBC驱动 http://www.postgresql.org/ftp/odbc/versions/msi/ ...

最新文章

  1. 敏捷团队中的QA由来
  2. Centos版本 32或64位查看命令
  3. GitHub地图转误差坐标
  4. spring第一个小例子(Spring_xjs1)
  5. boost::contract模块实现vector的测试程序
  6. Paxos第三篇 - Paxos成员组变更
  7. 【BZOJ】【1015】 【JSOI2008】星球大战starwar
  8. Anacodna 环境迁移详解
  9. SQLALchemy (ORM工具)[PostgreSQL为例]
  10. 20210224:力扣第229周周赛
  11. nrpe的安装和配置(转)
  12. NXP iMX8 SCFW和Boot Container Image编译
  13. 【收藏级教程】专业Finereport教程,帆软报表教程
  14. 银联网关支付接口规范
  15. gsp计算机系统内审结论,GSP计算机系统内审表.docx
  16. w7计算机应用放大按键,Win7窗口最大化和最小化快捷键是什么
  17. 42个最好的海外 app ASO工具
  18. GPLv2许可证正经人话翻译
  19. OpenCV - GrabCut 算法抠图(Python实现)
  20. 使用Ajax实现百度下拉框

热门文章

  1. Redis 事务深入解析
  2. 关于Java基础你不得不会的34个问题
  3. art-template用户注册方法
  4. Ext.grid.CheckboxSelectionModel状态设置
  5. malloc动态内存分配
  6. 华为交换机telnet和ftp服务开启/关闭命令
  7. Vue项目 报错TypeError [ERR INVALID ARG TYPE]: The “path“ argument must be of type string
  8. 爬山法实现 八皇后问题 (Python 实现)
  9. 计算机网络作业6,计算机网络作业 6
  10. mfc 子窗体 按钮不触发_VBA与Excel入门——用户窗体1