Postgresql使用笔记

0.下载&安装

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

Postgresql使用笔记

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

1.一些用到的命令

 1 使用yum安装好postgresql后,要进行初始化

 2 #service postgresql initdb

 3 修改数据库配置文件 

 4 #vim /var/lib/pgsql/data/postgresql.conf

 5 主要修改这几个

 6 listen_addresses = '*'

 7 port = 5432

 8 其他按需进行修改

 9 启动数据库

10 #service postgresql start  或 #systemctl start postgresql.service

11 切换用户并登录,修改密码

12 #su postgres

13 #psql

14 #alter user postgres with password '' ;

15 出现这个错误 psql: 致命错误:  用户 "postgres" Ident 认证失败

16 修改认证文件 

17 #vim /var/lib/pgsql/data/pg_hba.conf

18 最后几行配置 修改认证METHOD的ident为trust,实现用帐号密码来访问数据库。

19 最后重启服务

20 #service postgresql restart

2.开发

  1 #include <stdio.h>

  2 #include <libpq-fe.h>

  3 

  4 int postgresql_insert(PGconn *conn,char *sql);

  5 int postgresql_update(PGconn *conn,char *sql);

  6 int postgresql_delete(PGconn *conn,char *sql);

  7 int postgresql_select(PGconn *conn,char *sql);

  8 int postgresql_count(PGconn *conn,char *sql);

  9 

 10 int main()

 11 {

 12     int i;

 13     int ret = 0;

 14     //for(i=0;i<10000;i++)

 15     {

 16     char sql[512];

 17     const char *conninfo="hostaddr=127.0.0.1 port=5432 user=postgres dbname=postgres";

 18     PGconn * conn;

 19 

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

 21     conn = PQconnectdb(conninfo);

 22 

 23     if(PQstatus(conn) == CONNECTION_BAD)

 24     {

 25         fprintf(stderr,"%s\n",PQerrorMessage(conn));

 26         PQfinish(conn);

 27         return 0;

 28     }

 29 

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

 31     postgresql_insert(conn,sql);

 32 

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

 34     postgresql_update(conn,sql);

 35 

 36     sprintf(sql,"select * from test;");

 37     postgresql_select(conn,sql);

 38 

 39     sprintf(sql,"select * from test;");

 40     ret = postgresql_count(conn,sql);

 41     printf("count --- >  %d.\n",ret);

 42     sprintf(sql,"select * from logs; ");

 43     ret = postgresql_count(conn,sql);

 44     printf("count --- >  %d.\n",ret);

 45 

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

 47     postgresql_delete(conn,sql);

 48 

 49     PQfinish(conn);

 50     }

 51     return 0;

 52 }

 53 

 54 int postgresql_count(PGconn *conn,char *sql)

 55 {

 56     PGresult *res;

 57     int ret;

 58 

 59     res = PQexec(conn,sql);

 60     if(!res || PQresultStatus(res) != PGRES_TUPLES_OK)

 61     {

 62         fprintf(stderr,"Select Error.\n");

 63         PQclear(res);

 64         return -1;

 65     }

 66     ret = PQntuples(res);

 67     PQclear(res);

 68 

 69     return ret;

 70 }

 71 

 72 int postgresql_select(PGconn *conn,char *sql)

 73 {

 74     PGresult *res;

 75     int nFields=0;

 76     int i,j;

 77 

 78     res = PQexec(conn,sql); //select 查询自带事务

 79     if(!res || PQresultStatus(res) != PGRES_TUPLES_OK)

 80     {

 81         fprintf(stderr,"Select Error.\n");

 82         PQclear(res);

 83         return -1;

 84     }

 85 

 86     nFields = PQnfields(res);

 87     for(i=0;i<nFields;i++)

 88     {

 89         printf("%-15s",PQfname(res,i));

 90     }

 91     printf("\n");

 92     for(i=0;i<PQntuples(res);i++)

 93     {

 94         for(j=0;j<nFields;j++)

 95         {

 96             printf("%-15s",PQgetvalue(res,i,j));

 97         }

 98         printf("\n");

 99     }

100     printf("\n\n");

101     PQclear(res);

102 

103     return 0;

104 }

105 

106 int postgresql_delete(PGconn *conn,char *sql)

107 {

108     int ret = postgresql_insert(conn,sql);

109     return ret;

110 }

111 

112 int postgresql_update(PGconn *conn,char *sql)

113 {

114     int ret = postgresql_insert(conn,sql);

115     return ret;

116 }

117 

118 int postgresql_insert(PGconn *conn,char *sql)

119 {

120     PGresult * res;

121 

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

123 

124     if(!res || PQresultStatus(res) != PGRES_COMMAND_OK)

125     {

126         PQclear(res);

127         return -1;

128     }

129 

130     //should PQclear PGresult whenever it is no longer needed to avoid memory leaks.

131     PQclear(res); //每次这个res的PGresult结合都要进行关闭,防止内存泄漏

132 

133     res = PQexec(conn,sql);

134     if(!res || PQresultStatus(res) != PGRES_COMMAND_OK)

135     {

136         fprintf(stderr,"%s\n",PQerrorMessage(conn));

137         PQclear(res);

138         return -1;

139     }

140     PQclear(res);

141 

142     res = PQexec(conn,"COMMIT");

143     PQclear(res);

144     return 0;

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

 

 

参考资料:

http://www.linuxidc.com/Linux/2014-09/106772.htm

你可能感兴趣的:(PostgreSQL)