PostgreSQL数据库资料

转自:http://blog.csdn.net/postgrechina/article/details/49132791

推荐书籍:

概念书籍:

《PostgreSQL Introduction and Concepts》

开发书籍:

《PostgreSQL开发必备参考手册》

管理类书籍:

《PostgreSQL 9 Administration Cookbook》

《PostgreSQL 9.0 High Performance》

《PostgreSQL Server Programming》

《How PostgreSQL Processes a Query》

了解内核 :

http://www.postgresql.org/developer/backend/

http://wiki.postgresql.org/wiki/Backend_flowchart

《数据库查询优化器的艺术:原理解析与SQL性能优化》 - 海翔老师

《 PostgreSQL 内核分析》 - 彭老师

官方手册:

http://www.postgresql.org/docs/

中文手册:

http://www.postgres.cn/document

培训类PPT:

《PostgreSQL Inside 系列》

《PostgreSQL DBA培训PPT》

代码树:

http://doxygen.postgresql.org/

代码提交集:

https://commitfest.postgresql.org/

项目GIT:

http://git.postgresql.org

PostgreSQL GITHUB镜像

https://github.com/postgres/postgres

PostgreSQL JDBC 驱动:

http://jdbc.postgresql.org

http://jdbc.postgresql.org/development/privateapi/

PostgreSQL ODBC 驱动:

http://www.postgresql.org/ftp/odbc/versions/src/

PostgreSQL 扩展插件:

http://pgfoundry.org

http://pgxn.org/

GUI工具(pgAdmin):

http://www.pgadmin.org/

安全漏洞:

http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=postgresql

中文社区:

http://bbs.pgsqldb.com

中文官网:

http://www.postgres.cn

国外FAQ社区, BLOG:

http://www.pgcon.org/

https://www.postgresql.us/

http://www.itpug.org/

http://www.pgug.de/

http://www.diapug.org/

http://stackoverflow.com/questions/tagged/postgresql

http://momjian.us

http://www.pgexperts.com

http://blog.2ndquadrant.com/en

一位社区兄弟ty4z2008整理的资料

https://github.com/ty4z2008/Qix/blob/master/pg.md

其他推荐网站:

http://db.cs.berkeley.edu

http://mariposa.cs.berkeley.edu/

http://www.postgresql.org

http://wiki.postgresql.org/wiki/Todo

http://wiki.postgresql.org/wiki/Development_information

http://wiki.postgresql.org

http://www.pgbuildfarm.org

https://github.com/aggregateknowledge/postgresql-hll

http://www.postgis.org/

http://workshops.opengeo.org/postgis-intro/

http://www.opengeospatial.org/

http://code.google.com

https://developers.google.com/

http://www.perzl.org/aix/

http://db-engines.com/en/

http://pgmag.org/

http://planet.postgresql.org/

http://www.cybertec.at/

http://www.translattice.com/

http://citusdata.com/

http://www.dbms2.com/

http://www.informationweek.com/

http://www.infoq.com/

http://www.actian.com/

http://aws.amazon.com/redshift/

http://sourceforge.net/projects/postgres-xc/

http://www.postgres-xl.org/

http://madlib.net/

http://research.google.com/index.html

http://postgresql.1045698.n5.nabble.com/

http://blog.163.com/digoal%40126

推荐PostgreSQL 专业QQ群:

3336901

书籍打包下载:

如有需要请联系QQ: 276732431, 或留言留下您的邮箱. 文件超过100MB, 邮箱需要支持大附件才能接收.

或者到以下网盘下载.

http://yun.baidu.com/share/link?shareid=3626307544&uk=1982970774

PostgreSQL 培训视频

视频下载地址
 
 
PostgreSQL TODO & 软肋, 
大多数软件都有坑, 如果把握不好, 那就掉坑里去了, PostgreSQL亦如此, 为避免初次接触PostgreSQL的朋友掉坑里去, 这里罗列了一些PostgreSQL的软肋和TODO, 大家可以参考一下.
todo
1. http://wiki.postgresql.org/wiki/Todo
2. 基于WAL的多主复制(9.4可能会实现)
3. 多CPU资源利用, 如并行查询
4. shared nothing 架构(目前需要插件来实现如plproxy, pgpool-ii)
5. 基于块的增量基础备份(目前只有基于WAL的增量备份)
6. query cache, 如count(*)性能提升
7. toast 阈值可配置(目前只能在编译时指定)
8. 使用ssd作为二级缓存
9. PostgreSQL 目前一个集群只支持1个block_size, 这种不利于复杂场景的使用, 例如我们在同一个数据库中有大量的OLTP请求, 同时还有大数据的频繁导入需求的情况下, 选择小的block_size或者大的block_size都不合适, 如果能针对每个表指定不同的block_size的话可以很好的解决这一的问题.  当然如果数据库中存在不同大小的block_size, 那么随之而来的改动是非常大的, 例如shared buffer也必须兼容不同大小的block size.
在Oracle 9中, 支持一个数据库中存在不同的数据块大小. 
10. PostgreSQL的配置文件是直接编辑的, 没有像oracle这样的spfile, 当然9.4会支持alter system来修改, 但是<=9.3的没有, 修改文件容易出错, 不安全, 错误的话会导致数据库集群无法启动.
11. 目前开源的postgresql不支持函数加密. 安全性较低.
12. 目前移动表空间(如alter table tbl set tablespace newtbs;)会产生大量的XLOG, 这个应该是可以优化的.
13. 流复制异步模式下, failover后, 可能因为主备xlog的差异需要重做standby. 目前可以通过rsync减少网络传输, 或者zfs snapshot来将OLD PRIMARY回退到以前的状态达到切换成standby的目的. 
14. 没有表空间配额限制, 目前只能通过文件系统使用配额来简单的限制.
15. 没有rotate table, 类似mongoDB的capped collection. 限制记录条数, 空间, 或记录时长, 超过限制就覆盖最早的记录 .
16. pg-xc, pg-xl的数据重分布需要将数据从所有的数据节点加载到coordinator后, 在按照重分布算法分发到新的所有节点.
17. 同步流复制的一点可能可以改进的地方, 例如只有一台standby时, 如果standby异常或网络原因导致XLOG无法同步复制到standby并返回feedback的话, 那么在同步提交队列中等待提交的xact将处于等待状态, 一般的做法是使用2个或2个以上的standby来防止1个STANDBY故障时可以自动将同步standby节点向下转移, XACT不需要等待. 那么是不是可以有得选择, 例如在等待多少秒之后自动切换成异步模式.
18. 目前没有比较好的读写分离或shared-nothing解决方案, 例如
1. 通过中间件pgpool-II构建读写分离, 但是pgpool-II目前稳定性, 性能(tps)都不尽人意.
2. 使用pg-xc构建的shared-nothing, 性能(TPS)损耗太大, 同时全局一致性还原(PITR)目前还只有停留在创建barriers, 粒度无法达到gxid的粒度(因为每个节点各管各自的XID).
3. 使用plproxy构建shared-nothing, 性能损失小, 但是没有跨节点事务能力, 当然如果应用层愿意使用 2PC来实现的话, 也是可以的. 另外, 接口必须是PLPROXY函数, 所以对应用来说适配较差.
 
软肋
1. 读写并发管理通过新增行版本实现, 会带来垃圾数据, 对于非HOT更新的话, 还会引起索引更新, 导致索引更容易膨胀.
2. 显然这种MVCC机制不利于频繁更新的应用场景, 同一条记录被更新10次的话, 会产生10个版本的写xlog和heap page的IO, 同时在VACUUM的时候还需要写xlog以及heap page的IO. 这10个版本可能并不会同时存在, 但是却实实在在的产生了这些写IO.
3. 通过xid来识别版本, 且xid是32位存储, XID是需要复用的, 所以经过一定的事务分配后需要freeze, 当然此MVCC机制的好处也是有的, 例如锁粒度很小, 容易实现repeatable read和ssi. 会话层可实现跨越会话的一致性镜像等.
4. 同样MVCC带来的问题, 在大数据库中使用逻辑备份时(), 备份开始后产生的垃圾数据都无法被回收, 如果备份时间很长, 将导致数据库膨胀比较厉害, 同时也会影响对象的freeze. 所以对大库建议使用pitr备份方式. 
5. one-by-one的扩展数据块使得对同一个对象进行大批量的并行数据导入的时候(例如并行COPY)会产生extend锁等待问题. 影响导入性能. 参见 : http://blog.163.com/digoal@126/blog/static/163877040201392641033482
 
 
 
海翔老师发来一些互联网上收集到的问题, 我谨表明下个人观点.

对PostgreSQL数据库有一定了解, 或者尝到甜头的朋友大多都会有这样的疑问, 为什么PostgreSQL好用却没有MySQL流行呢?
1 PG没MySQL流行的原因
因为没有使用过MySQL, 所以不太好回答.
 
2 PG的优势有哪些?(请例举您认为的最优优势的5条,降序排列)
1. 社区活跃(每天都有commit, 每年全球大会, 每年全球地方性会议等), 运作稳定(主要贡献者来自全球的诸多行业的诸多企业, 不会出现一家独控的局面), git版本管理, wiki知识库管理, BSD许可.
 
2. 血统纯正, 以及丰富的第三方插件. PostgreSQL的分支只有1个, 不会出现分支众多, 版本不统一的情况. 第三方插件非常多, 基本上都来自实际的需求.
postgreSQL插件的使用非常简单, 因为是模块化形式的, 安装好后, 加载到动态链接库即可. (包括性能, 功能扩展, 融合, 管理等方面的插件.)
 
3. 流复制, 外部表接口, MPP, shared nothing
PG的流复制是基于块的变更, 速度极其之快, 局域网内能实现毫秒级的延迟, 广域网也不需要担心网络稳定性, 因为是续传的. 流复制可用于HA,容灾, 读写分离等场景.
9.4版本还会引入逻辑流复制, 可用于multi master的场景.
PG支持外部表接口, 在PG中可以直接读写其他数据源的数据, 如Oracle, MySQL. 适合混杂场景的使用, 或者数据迁移场景的使用.
MPP, PostgreSQL的第三方插件或者第三方商业软件可以实现MPP的功能, 例如GreenPlum, PgPOOL-II, pg-xc, citusDB, postgres-xl等,还可以结合HADOOP来使用.
shared nothing, postgresql第三方插件可以方便的实现shared nothing的功能, 例如plproxy, pgpool-ii, pg-xc等.
 
4. 数据类型丰富, 索引类型丰富, 可动态加载的模块, 丰富的服务端函数
PG的数据类型非常的丰富, 同时支持自定义类型. 除了传统的数据类型之外, 还支持例如range类型, IP类型, HSTORE类型, JSON类型, 
PG的索引访问接口也非常丰富, 例如支持btree, hash, gist, gin, spgist等诸多索引访问接口.
可动态加载的模块, 用户可自定义一些库, 在需要使用时动态加载. 同时PG支持自定义钩子应用的场景(_PG_init()).
丰富的服务端函数, 例如plpgsql, plpython, plperl, pltcl, pl-R, pljava, plv8, C等. 适用各种开发人员使用.
 
5. 兼容性, 稳定性, 可靠性, 性能, 后期维护, 审计需求等.
PG的兼容性非常好, 支持几乎所有的硬件架构和操作系统.
稳定, 可靠, 性能卓越.
维护简单, 诸多功能可以满足审计需求.
 
3 PG在互联网/传统行业(有事务需求)/或其它行业的未来?
国内PG圈子越来越活跃, 包括传统行业, 金融行业, 运营商, 互联网行业, 政府都有使用. 
由于数据库在业务系统中的重要性, 一般曾经未使用PG的公司会从不太重要的新项目着手尝试使用PG, 尝到甜头后才会有后续大规模应用的动作.
老的项目, 从其他数据库迁移到PG的, 肯定是这些已有的数据库无法满足现阶段或未来的需求. 例如可能是迫于成本的考虑, 又或者项目中依赖PG的一些特性.

PostgreSQL数据库资料(转)的更多相关文章

  1. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  2. TPC-H生成.tbl文件导入postgresql数据库的坑

    数据库project好好的不用主流的MySQL和Microsoft server而要求用听都没听过的postgresql (当然,可能你三个都没听过) 这里的坑主要是把生成的那八张.tbl的表导入pg ...

  3. 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...

  4. Bandwidthd+Postgresql数据库配置笔记

    Bandwidthd+Postgresql数据库配置笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/zjianbo/article/detai ...

  5. [转]PostgreSQL 中文资料汇总

    原文链接:http://francs3.blog.163.com/blog/static/405767272014017341219/ --1 中文社区网站  PostgreSQL 中文社区官网: h ...

  6. 德哥PostgreSQL学习资料汇总(转)

    文章来自:https://yq.aliyun.com/articles/59251?spm=5176.100239.bloglist.95.5S5P9S 德哥博客新地址:https://billtia ...

  7. 建立安全SSL连接PostgreSQL数据库服务器

    建立安全SSL连接PostgreSQL数据库服务器当前物联网的挑战之一就是提供最高的安全级别.这就是为什么需要开启SSL连接到 PostgreSQL. 当你想要安全的存储数据到PostgreSQL数据 ...

  8. PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

    最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...

  9. PowerDesigner反向工程PostgreSQL数据库

    1. 环境准备: a)         安装PowerDesigner,以PowerDesigner15.1为例 b)         安装java jdk,以jdk-7-windows-i586为例 ...

随机推荐

  1. Java中private、protected、public和default的区别-001

    public: 具有最大的访问权限,可以访问任何一个在classpath下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. protected: 主要的作用就是用来保护子 ...

  2. JDK、J2EE、J2SE、J2ME的区别

    JDK.J2EE.J2SE.J2ME的区别 你对JDK.J2EE.J2SE.J2ME概念是否了解,这里和大家分享一下JDK.J2EE.J2SE.J2ME的概念以及他们的关系区别,相信本文介绍一定会让你 ...

  3. 爬虫框架Scrapy之Request/Response

    Request yield scrapy.Request(url, self.parse) Request 源码: # 部分代码 class Request(object_ref): def __in ...

  4. ASP.NET.Identity 加密算法

    public static string HashPassword(string password) { if (password == null) { throw new ArgumentNullE ...

  5. bat批处理以当前时间创建文本文件

    :: 表示注释 :: @表示不显示当前命令,只在后台执行 :: @echo off 表示以后执行的命令都不显示 :: set d=%,% 表示设置变量d为当前年月日,默认表示为例如:// :: set ...

  6. pycharm社区版创建django项目(Windows 8.1)

    django是Python的一个开源web框架,在pycharm开发环境中,pycharm专业版在新建一个项目的时候有django选项,帮助创建一个django框架的项目.pycharm社区版需要自己 ...

  7. js计算之递归

    看以下js代码: var w = [{ label: '你好', node: [ { label: '你好啊', node: [{ label: "还好", node: [] }, ...

  8. idea 2018注册码

    原文:https://blog.csdn.net/zhw0596/article/details/81394870 (最新的看后面!!!    转载的请附上原文链接   搜索不易!)百度的,上一个没用 ...

  9. 交通部道路运输车辆卫星定位系统部标JTT808、809、796标准大全

    无论是开发GPS设备硬件还是开发应用软件,都要面临一个标准,这个标准就是国家交通部发布的道路运输车辆卫星定位系统部标认证标准,它涵盖了GPS硬件设备参数.功能标准,也包括了设备上传到应用平台的协议标准 ...

  10. 实例化后的list的默认值

    public class List默认值 { public static void main(String[] args) { List<String> arrayList = new A ...