您的位置:首页 > 数据库

Postgresql使用笔记

2015-06-30 15:50 302 查看
0.下载&安装

  系统,虚拟机中的centos6.3. 直接yum进行下载,下载完要进行数据库初始化操作,还有修改登录数据库的验证方式,还有数据库不能用root用户进行数据库管理。



  安装需要选择性安装,postgresql, postgresql-devel, postgresql-libs, postgresql-libs, posgresql-test, postgresql-server.

1.一些用到的命令

使用yum安装好postgresql后,要进行初始化
#service postgresql initdb
修改数据库配置文件
#vim /var/lib/pgsql/data/postgresql.conf
主要修改这几个
listen_addresses = '*'
port = 5432
其他按需进行修改
启动数据库
#service postgresql start  或 #systemctl start postgresql.service
切换用户并登录,修改密码
#su postgres
#psql
#alter user postgres with password '' ;
出现这个错误 psql: 致命错误:  用户 "postgres" Ident 认证失败
修改认证文件
#vim /var/lib/pgsql/data/pg_hba.conf
最后几行配置 修改认证METHOD的ident为trust,实现用帐号密码来访问数据库。
最后重启服务
#service postgresql restart


2.开发

#include <stdio.h>
#include <libpq-fe.h>

int postgresql_insert(PGconn *conn,char *sql);
int postgresql_update(PGconn *conn,char *sql);
int postgresql_delete(PGconn *conn,char *sql);
int postgresql_select(PGconn *conn,char *sql);
int postgresql_count(PGconn *conn,char *sql);

int main()
{
int i;
int ret = 0;
//for(i=0;i<10000;i++)
{
char sql[512];
const char *conninfo="hostaddr=127.0.0.1 port=5432 user=postgres dbname=postgres";
PGconn * conn;

//conn = PQsetdb(pghost,pgport,pgoptions,pgtty,dbName);
conn = PQconnectdb(conninfo);

if(PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr,"%s\n",PQerrorMessage(conn));
PQfinish(conn);
return 0;
}

sprintf(sql,"insert into test(id,name,pwd) values(1,'root','pwddddd'); ");
postgresql_insert(conn,sql);

sprintf(sql,"update test set id=2,name='caonima',pwd='中文' where pwd='pwddd'; ");
postgresql_update(conn,sql);

sprintf(sql,"select * from test;");
postgresql_select(conn,sql);

sprintf(sql,"select * from test;");
ret = postgresql_count(conn,sql);
printf("count --- >  %d.\n",ret);
sprintf(sql,"select * from logs; ");
ret = postgresql_count(conn,sql);
printf("count --- >  %d.\n",ret);

sprintf(sql,"delete from test where id=1; ");
postgresql_delete(conn,sql);

PQfinish(conn);
}
return 0;
}

int postgresql_count(PGconn *conn,char *sql)
{
PGresult *res;
int ret;

res = PQexec(conn,sql);
if(!res || PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr,"Select Error.\n");
PQclear(res);
return -1;
}
ret = PQntuples(res);
PQclear(res);

return ret;
}

int postgresql_select(PGconn *conn,char *sql)
{
PGresult *res;
int nFields=0;
int i,j;

res = PQexec(conn,sql); //select 查询自带事务
if(!res || PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr,"Select Error.\n");
PQclear(res);
return -1;
}

nFields = PQnfields(res);
for(i=0;i<nFields;i++)
{
printf("%-15s",PQfname(res,i));
}
printf("\n");
for(i=0;i<PQntuples(res);i++)
{
for(j=0;j<nFields;j++)
{
printf("%-15s",PQgetvalue(res,i,j));
}
printf("\n");
}
printf("\n\n");
PQclear(res);

return 0;
}

int postgresql_delete(PGconn *conn,char *sql)
{
int ret = postgresql_insert(conn,sql);
return ret;
}

int postgresql_update(PGconn *conn,char *sql)
{
int ret = postgresql_insert(conn,sql);
return ret;
}

int postgresql_insert(PGconn *conn,char *sql)
{
PGresult * res;

res = PQexec(conn,"BEGIN"); //显式事务

if(!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
PQclear(res);
return -1;
}

//should PQclear PGresult whenever it is no longer needed to avoid memory leaks.
PQclear(res); //每次这个res的PGresult结合都要进行关闭,防止内存泄漏

res = PQexec(conn,sql);
if(!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr,"%s\n",PQerrorMessage(conn));
PQclear(res);
return -1;
}
PQclear(res);

res = PQexec(conn,"COMMIT");
PQclear(res);
return 0;
}


# gcc -ggdb test.c -o test -lpq  #我 postgresql 安装后有自带这个libpq库


参考资料:
http://www.linuxidc.com/Linux/2014-09/106772.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: