0.下载&安装

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

  安装需要选择性安装,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使用笔记相关推荐

  1. postgreSql数据库笔记

    postgreSql数据库笔记 1.pg创建序列: SELECT nextval('seq_bsm' :: regclass) as XH;//查询序列值 //创建序列 CREATE SEQUENCE ...

  2. Postgresql学习笔记-高级语法篇

    Postgresql学习笔记-高级语法篇 Postgresql 约束 Postgresql约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表的时候就规定(通 ...

  3. PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL

    目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...

  4. PostgreSQL学习笔记(1)

    安装psql brew install postgresql 启动服务 brew services start postgresql 使用psql进入控制台,报错: psql: FATAL:  dat ...

  5. PostgreSQL学习笔记10之性能提升技巧

    一.使用EXPLAIN: PostgreSQL为每个查询都生成一个查询规划,因为选择正确的查询路径对性能的影响是极为关键的.PostgreSQL本身已经包含了一个规划器用于寻找最优规划,我们可以通过使 ...

  6. PostgreSQL学习笔记9之事务隔离

    在SQL的标准中事物隔离级别分为以下四种:     1. 读未提交(Read uncommitted)     2. 读已提交(Read committed)     3. 可重复读(Repeatab ...

  7. PostgreSQL学习笔记8之索引

    一.索引的类型: PostgreSQL提供了多 种索引类型:B-Tree.Hash.GiST和GIN,由于它们使用了不同的算法,因此每种索引类型都有其适合的查询类型,缺省时,CREATE INDEX命 ...

  8. PostgreSQL学习笔记7之函数和操作符三

    九.序列操作函数: 序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表.一个序列对象通常用于为行或者表生成唯一的标识符.下面序列函数,为我们从序列对象中获取最新的序列值提 ...

  9. PostgreSQL学习笔记6之函数和操作符二

    六.模式匹配: PostgreSQL中提供了三种实现模式匹配的方法:SQL LIKE操作符,更近一些的SIMILAR TO操作符,和POSIX-风格正则表达式.     1. LIKE:     st ...

最新文章

  1. poj1523(割点)
  2. Java入门教程系列【1】Java基本数据类型 小白必入系列
  3. 虚无鸿蒙哪个厉害,【图说鸿蒙】鸿蒙设定之七柱神(五)
  4. java controller json_Controller 获取 JSON
  5. Exchange Server 2016 独立部署/共存部署 (五)—— 配置DAG(下)
  6. 关于集合addAll()方法的坑度
  7. 用户故事与敏捷方法-阅读总结
  8. Blue Coat 2.8亿美元收购云安全创业企业Elastica
  9. 南京标志设计-logo商标设计-企业VI形象识别系统
  10. python假分数约分,数学中假分数怎么约分
  11. 友盟 推特分享错误
  12. 【联盛德W806上手笔记】八、SPI及其DMA
  13. Linux修改用户名
  14. 华为OD机试 - 开心消消乐
  15. 成都计算机博士点,2017学位授权审核结果公示!快看四川高校新增哪些博士点?...
  16. 海洋洋流图绘制 html5,虚拟现实系统中海洋洋流可视化的研究与实现
  17. 百度云加速下载Proxyee-down的下载与安装教程3.x
  18. 谷歌浏览器新标签页(新开空白标签页)上不能使用手势的解决方法
  19. 电感/晶振布局布线要求
  20. GTJ2018如何导出全部工程量_运用BIM+无人机技术计算土石方工程量

热门文章

  1. 【设计模式】装饰者模式
  2. JavaScript -- throw、try 和 catch
  3. saltstack之(二)软件包下载安装
  4. 微软发布了Spartan项目的细节,并证实了某些流言
  5. AJAX 跨域请求(转发)
  6. 配置交换机端口聚合(思科)
  7. [翻译]Json.NET API-Linq to Json Basic Operator(基本操作)
  8. 自动化测试里的数据驱动和关键字驱动思路的理解
  9. Cloudify — 系统架构
  10. 5G NR — 国内运营商的频段和带宽划分