linux下postgreSQL 入门-1

Ryan:参考了一些文章,特别是文章中提到的文章,在此向原作者表示感谢。

1、安装

到http://www.postgresql.org网站下载。我安装的是9.2版本的,xxx.run,在linux中,./xxx.run进行安装。
安装过程中,linux中新加用户postgres,数据库postgres。安装结束默认PostgreSQL安装在/opt/PostgreSQL/9.2下,默认的用户postgres目录为/var/lib/pgsql/。

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

结果如下图所示。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值