Ryan:参考了一些文章,特别是文章中提到的文章,在此向原作者表示感谢。
1、安装
2、linux下连接postgreSQL
参考《linux下免费数据库PostgreSQL开发入门》文章
(1)、不能以root登陆Linux来操作数据库(启动数据库服务除外),以数据库用户名postgres登录linux操作系统,若是用linux用户名登陆,则通过su xxx来转换成数据库用户身份。
以用户名postgres登录linux系统,页面显示“bash-3.2$”,然后输入命令进行操作。
数据库用户与Linux用户是不同的概念,只有数据库用户才能操作数据库,以postgres登录Linux,然后是使用createuser来添加用户,dropuser来删除用户,也可以使用SQL命令CREATE USER来创建。
PostgreSQL数据库常用操作命令:
Createdb 创建数据库
Dropdb 删除数据库
Createuser 创建数据库用户
Dropuser 删除数据库用户
Psql 交互式PostgreSQL前端工具,可以用它来操作数据库
Initdb 初始化postgreSQL数据库
(2)安装postgresql完成后,以postgres用户名登录linux操作系统,进行如下图所示操作。
创建数据库
$createdb testdb
需要修改/opt/PostgreSQL/9.2/data下文件pg_hba.conf文件中用户连接认证方式,若不修改,则创建数据库命令执行后系统会让输入口令,可以讲md5修改为trust,修改后重启系统以便生效。
关于postgresql访问认证设置,可以参考《如何设置postgresql访问认证设置》,
网址http://www.233.com/linux/fudao/20091022/09580248-2.html
用psql连接到数据库
$psql testdb
3、编程
在/var/lib/pgsql下新建c文件test.c,代码如下:
#include <stdio.h>
#include <libpq-fe.h>
int main()
{
PGconn *conn;
PGresult *res;
char *pghost=NULL;
char *pgport=NULL;
char *pgoptions=NULL;
char *pgtty=NULL;
char *dbname="testdb";
/*database name*/
int i=0;
int t=0;
int s,k;
conn=PQsetdb(pghost,pgport,pgoptions,pgtty,dbname);
if(PQstatus(conn)==CONNECTION_BAD)
{
fprintf(stderr,"Connection to database '%s'failed!\n",dbname);
PQfinish(conn);
return 0;
}
res=PQexec(conn,"select * from test");
/*execte the commam*/
if(PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr,"Exec Query Failed!\n");
PQclear(res);
return 0;
}
i=PQntuples(res);
/*get the nummer of the record*/
t=PQnfields(res);
/*get the fileds num*/
for(s=0;s<i;s++)
{
for(k=0;k<t;k++)
{
printf("%s",PQgetvalue(res,s,k));
printf(" ");
}
printf("\n");
}
PQfinish(conn);
PQclear(res);
return 0;
}
编译,bash-3.2$gcc test.c -o test
出错,如下图所示。
编译,bash-3.2$gcc -I /opt/PostgreSQL/9.2/include -L /opt/PostgreSQL/9.2/lib -lpq test.c -o test
会出现2个warning,如上图所示,运行可执行文件test,会出现执行错误。
进行如下操作
bash-3.2$export LD_LIBRARY_PATH=/opt/PostgreSQL/lib:$LD_LIBRARY_PATH
这样便不会出现warning,但是当系统重启时,还会出现警告,将数据库lib文件路径添加到/etc/ld.so.conf中即可(转换为root角色,vi /etc/ld.so.conf,直接将/opt/PostgreSQL/lib添加到其中,然后使用命令ldconfig更新ld.so.cache
重启linxu使其生效),这样便可以消除上面warning问题。
linux添加库文件问题参考文章《linux添加环境变量与GCC编译器添加include与lib环境变量》,
网址为:http://www.cnblogs.com/image-eye/archive/2011/08/20/2147133.html
有关编译命令解释,参考《使用libpq测试pgsql》,网址:http://blog.chinaunix.net/uid-11582448-id-745429.html
- -Idirectory 选项用来告诉编译器PostgreSQL头文件的安装位置,如果没有提供正确的选项就会出现错误:
libpq-fe.h: No such file or directory
- -Ldirectory 选项用来告诉编译器libpq库所在的目录,如果你给错了目录位置或者根本没有给出,那下面的错误肯定会出现了:
cannot find -lpq
- 声明选项 -lpq,这样就可以把libpq库链接进来,而如果没有链接,那么很有可能出现类似的错误
undefined reference to `PQstatus'
也可以参考《数据库编程接口libpq 3》的解释,
网址:http://blog.csdn.net/perfectpdl/article/details/6094288
可以参考文章《linux下libpq开发》,
网址:http://blog.csdn.net/zst126/article/details/2608445
重新编译,bash-3.2$gcc -I /opt/PostgreSQL/9.2/include -L /opt/PostgreSQL/9.2/lib -lpq test.c -o test
执行命令
bash-3.2$./test
结果如下图所示。