Postgresql使用笔记
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使用笔记相关推荐
- postgreSql数据库笔记
postgreSql数据库笔记 1.pg创建序列: SELECT nextval('seq_bsm' :: regclass) as XH;//查询序列值 //创建序列 CREATE SEQUENCE ...
- Postgresql学习笔记-高级语法篇
Postgresql学习笔记-高级语法篇 Postgresql 约束 Postgresql约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表的时候就规定(通 ...
- PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL
目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...
- PostgreSQL学习笔记(1)
安装psql brew install postgresql 启动服务 brew services start postgresql 使用psql进入控制台,报错: psql: FATAL: dat ...
- PostgreSQL学习笔记10之性能提升技巧
一.使用EXPLAIN: PostgreSQL为每个查询都生成一个查询规划,因为选择正确的查询路径对性能的影响是极为关键的.PostgreSQL本身已经包含了一个规划器用于寻找最优规划,我们可以通过使 ...
- PostgreSQL学习笔记9之事务隔离
在SQL的标准中事物隔离级别分为以下四种: 1. 读未提交(Read uncommitted) 2. 读已提交(Read committed) 3. 可重复读(Repeatab ...
- PostgreSQL学习笔记8之索引
一.索引的类型: PostgreSQL提供了多 种索引类型:B-Tree.Hash.GiST和GIN,由于它们使用了不同的算法,因此每种索引类型都有其适合的查询类型,缺省时,CREATE INDEX命 ...
- PostgreSQL学习笔记7之函数和操作符三
九.序列操作函数: 序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表.一个序列对象通常用于为行或者表生成唯一的标识符.下面序列函数,为我们从序列对象中获取最新的序列值提 ...
- PostgreSQL学习笔记6之函数和操作符二
六.模式匹配: PostgreSQL中提供了三种实现模式匹配的方法:SQL LIKE操作符,更近一些的SIMILAR TO操作符,和POSIX-风格正则表达式. 1. LIKE: st ...
最新文章
- poj1523(割点)
- Java入门教程系列【1】Java基本数据类型 小白必入系列
- 虚无鸿蒙哪个厉害,【图说鸿蒙】鸿蒙设定之七柱神(五)
- java controller json_Controller 获取 JSON
- Exchange Server 2016 独立部署/共存部署 (五)—— 配置DAG(下)
- 关于集合addAll()方法的坑度
- 用户故事与敏捷方法-阅读总结
- Blue Coat 2.8亿美元收购云安全创业企业Elastica
- 南京标志设计-logo商标设计-企业VI形象识别系统
- python假分数约分,数学中假分数怎么约分
- 友盟 推特分享错误
- 【联盛德W806上手笔记】八、SPI及其DMA
- Linux修改用户名
- 华为OD机试 - 开心消消乐
- 成都计算机博士点,2017学位授权审核结果公示!快看四川高校新增哪些博士点?...
- 海洋洋流图绘制 html5,虚拟现实系统中海洋洋流可视化的研究与实现
- 百度云加速下载Proxyee-down的下载与安装教程3.x
- 谷歌浏览器新标签页(新开空白标签页)上不能使用手势的解决方法
- 电感/晶振布局布线要求
- GTJ2018如何导出全部工程量_运用BIM+无人机技术计算土石方工程量