Mysql 使用太广泛了,以至于我不得不将一些应用从mysql 迁移到postgresql, 很多开源软件都是以Mysql 作为数据库标准,并且以Mysql 作为抽象基础的,但是具体使用过程中,发现Mysql 有很多问题,所以都迁移到postgresql上了,转一个Mysql 和Postgresql 对比的文章:

PostgreSQL由于是类似Oracle的多进程框架,所以能支持高并发的应用场景,这点与Oracle数据库很像,所以把Oracle DBA转到PostgreSQL数据库  
上是比较容易的,毕竟PostgreSQL数据库与Oracle数据库很相似。 
同时,PostgreSQL数据库的源代码要比MySQL数据库的源代码更容易读懂,如果团队的C语言能力比较强的知,就能在PostgreSQL数据库上做开发,比方说实现类似greenplum的系统,这样也能与现在的分布式趋势接轨。 
  
为了说明PostgreSQL的功能,我下面简要对比一下PostgreSQL数据库与MySQL数据库之间的差异: 
我们先借助Jametong翻译的"从Oracle迁移到Mysql之前必须知道的50件事",看一看如何把Oracle转到MySQL中的困难: 
50 things to know before migrating Oracle to MySQL 
by Baron Schwartz,Translated by Jametong 
1. 对子查询的优化表现不佳. 
2. 对复杂查询的处理较弱 
3. 查询优化器不够成熟 
4. 性能优化工具与度量信息不足 
5. 审计功能相对较弱 
6. 安全功能不成熟,甚至可以说很粗糙.没有用户组与角色的概念,没有回收权限的功能(仅仅可以授予权限).当一个用户从不同的主机/网络以同样地用户名/密码登录之后,可能被当作完全不同的用户来处理.没有类似于Oracle的内置的加密功能. 
7. 身份验证功能是完全内置的.不支持LDAP,Active Directory以及其它类似的外部身份验证功能. 
8. Mysql Cluster可能与你的想象有较大差异. 
9. 存储过程与触发器的功能有限. 
10. 垂直扩展性较弱. 
11. 不支持MPP(大规模并行处理). 
12. 支持SMP(对称多处理器),但是如果每个处理器超过4或8个核(core)时,Mysql的扩展性表现较差. 
13. 对于时间、日期、间隔等时间类型没有秒以下级别的存储类型. 
14. 可用来编写存储过程、触发器、计划事件以及存储函数的语言功能较弱. 
15. 没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的恢复功能. 
16. 不支持快照功能. 
17. 不支持数据库链(database link).有一种叫做Federated的存储引擎可以作为一个中转将查询语句传递到远程服务器的一个表上,不过,它功能很粗糙并且漏洞很多. 
18. 数据完整性检查非常薄弱,即使是基本的完整性约束,也往往不能执行。 
19. 优化查询语句执行计划的优化器提示非常少. 
20. 只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge
join)与散列连接(hash join).  
21. 大部分查询只能使用表上的单一索引;在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还要慢. 
22. 不支持位图索引(bitmap index).每种存储引擎都支持不同类型的索引.大部分存储引擎都支持B-Tree索引. 
23. 管理工具较少,功能也不够成熟. 
24. 没有成熟能够令人满意的IDE工具与调试程序.可能不得不在文本编辑器中编写存储过程,并且通过往表(调试日志表)中插入记录的方式来做调试. 
25. 每个表都可以使用一种不同的存储引擎. 
26. 每个存储引擎在行为表现、特性以及功能上都可能有很大差异. 
27. 大部分存储引擎都不支持外键. 
28. 默认的存储引擎(MyISAM)不支持事务,并且很容易损坏. 
29. 最先进最流行的存储引擎InnoDB由Oracle拥有. 
30. 有些执行计划只支持特定的存储引擎.特定类型的Count查询,在这种存储引擎中执行很快,在另外一种存储引擎中可能会很慢. 
31. 执行计划并不是全局共享的,,仅仅在连接内部是共享的. 
32. 全文搜索功能有限, 只适用于非事务性存储引擎. Ditto用于地理信息系统/空间类型和查询. 
33. 没有资源控制.一个完全未经授权的用户可以毫不费力地耗尽服务器的所有内存并使其崩溃,或者可以耗尽所有CPU资源. 
34. 没有集成商业智能(business intelligence), OLAP **数据集等软件包. 
35. 没有与Grid Control类似的工具( http://solutions.mysql.com/go.php?id=1296&t=s ) 
36. 没有类似于RAC的功能.如果你问”如何使用Mysql来构造RAC”,只能说你问错了问题. 
37. 不支持用户自定义类型或域(domain). 
38. 每个查询支持的连接的数量最大为61. 
39. MySQL支持的SQL语法(ANSI SQL标准)的很小一部分.不支持递归查询、通用表表达式(Oracle的with
语句)或者窗口函数(分析函数).支持部分类似于Merge或者类似特性的SQL语法扩展,不过相对于Oracle来讲功能非常简单.  
40. 不支持功能列(基于计算或者表达式的列,Oracle11g 开始支持计算列,以及早期版本就支持虚列(rownum,rowid)). 
41. 不支持函数索引,只能在创建基于具体列的索引. 
42. 不支持物化视图. 
43. 不同的存储引擎之间,统计信息差别很大,并且所有的存储引擎支持的统计信息都只支持简单的基数(cardinality)与一定范围内的记录数(rows-in-a-range).
换句话说,数据分布统计信息是有限的.更新统计信息的机制也不多.  
44. 没有内置的负载均衡与故障切换机制. 
45. 复制(Replication)功能是异步的,并且有很大的局限性.例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master. 
46. Cluster并不如想象的那么完美.或许我已经提过这一点,但是这一点值得再说一遍. 
47. 数据字典(INFORMATION_SCHEMA)功能很有限,并且访问速度很慢(在繁忙的系统上还很容易发生崩溃). 
48. 不支持在线的Alter Table操作. 
49. 不支持Sequence. 
50. 类似于ALTER TABLE或CREATE TABLE一类的操作都是非事务性的.它们会提交未提交的事务,并且不能回滚也不能做灾难恢复.Schame被保存在文件系统上,这一点与它使用的存储引擎无关.

PostgreSQL数据库可以解决以上问题中的: 
1. 对子查询的优化表现不佳 
2. 对复杂查询的处理较弱 
3. 查询优化器不够成熟 
PostgreSQL完全支持SQL-92标准,对SQL的支持也很全面,可以支持复杂的SQL查询。

4. 性能优化工具与度量信息不足 
PostgreSQL提供了执行计划和详细的cost值,可以方便看到SQL的执行效率。

9. 存储过程与触发器的功能有限. 
PostgreSQL提供了完善的存储过程和触发器支持。

11. 不支持MPP(大规模并行处理) 
而PostgreSQL是类似Oracle数据库的架构,是多进程的架构,而不像MySQL是多线程的架构,所以能支持MPP。

18. 数据完整性检查非常薄弱,即使是基本的完整性约束,也往往不能执行。 
PostgreSQL提供完善的数据完整性检查机制,支持外键。

20. 只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge
join)与散列连接(hash join).  
而PostgreSQL则支持这些表连接类型

21. 大部分查询只能使用表上的单一索引;在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还要慢. 
PostgreSQL数据不存在这个问题,假设表T的两个字段col1的col2上有两个索引,idx_1和idx_2,那么select
* from t where col1=:a and col2=:b;查询时,PostgreSQL数据库有可能把这个查询转化为select * from t where col1=:a intersect select * from t where col2=:b,这样两个索引都可以使用上。

25. 每个表都可以使用一种不同的存储引擎. 
26. 每个存储引擎在行为表现、特性以及功能上都可能有很大差异. 
27. 大部分存储引擎都不支持外键. 
28. 默认的存储引擎(MyISAM)不支持事务,并且很容易损坏. 
29. 最先进最流行的存储引擎InnoDB由Oracle拥有. 
30. 有些执行计划只支持特定的存储引擎.特定类型的Count查询,在这种存储引擎中执行很快,在另外一种存储引擎中可能会很慢. 
PostgreSQL只有一种存储引擎,所以不存在上面的情况。而PostgreSQL支持完善的事务。

32. 全文搜索功能有限, 只适用于非事务性存储引擎. Ditto用于地理信息系统/空间类型和查询. 
PostgreSQL数据库支持全文搜索,支持更多类型的索引,如B-tree,R-tree, Hash, GiST,
GIN,R-tree,GIST,GIN索引可用于空间类型和查询。

37. 不支持用户自定义类型或域(domain). 
PostgreSQL支持丰富的类型,同时也支持自定义类型。

39. MySQL支持的SQL语法(ANSI SQL标准)的很小一部分.不支持递归查询、通用表表达式(Oracle的with
语句)或者窗口函数(分析函数).支持部分类似于Merge或者类似特性的SQL语法扩展,不过相对于Oracle来讲功能非常简单.  
这些PostgreSQL数据库都支持,如窗口函数。

41. 不支持函数索引,只能在创建基于具体列的索引. 
PostgreSQL支持函数索引

49. 不支持Sequence. 
PostgreSQL支持sequence

50. 类似于ALTER TABLE或CREATE TABLE一类的操作都是非事务性的.它们会提交未提交的事务,并且不能回滚也不能做灾难恢复.Schame被保存在文 
件系统上,这一点与它使用的存储引擎无关. 
PostgreSQL不存在这个问题。

PostgreSQL与MySQL比较(转)的更多相关文章

  1. 利用Navicat高效率postgresql转mysql数据库

    本人很喜欢postgresql数据库,也一直认为postgresql比mysql要更好更强大. 可生态环境太差了,无奈,最近要把一个小站转成mysql数据库. 小站主要表数据110万,pg_dump备 ...

  2. [评测]低配环境下,PostgresQL和Mysql读写性能简单对比(欢迎大家提出Mysql优化意见)

    [评测]低配环境下,PostgresQL和Mysql读写性能简单对比 原文链接:https://www.cnblogs.com/blog5277/p/10658426.html 原文作者:博客园--曲 ...

  3. PostgreSQL与MySQL常用命令比较[转]

    PostgreSQL与MySQL常用命令比较 原文链接: http://www.phpwell.com/?p=174 PostgreSQL MySQL 服务启动:1)#service postgres ...

  4. 【转】PostgreSQL与MySQL比较

    转自:https://www.cnblogs.com/geekmao/p/8541817.html PostgreSQL与MySQL比较   特性 MySQL PostgreSQL 实例 通过执行 M ...

  5. [转帖]PostgreSQL与MySQL比较 From 2010年

    PostgreSQL与MySQL比较 [复制链接]  http://bbs.chinaunix.net/thread-1688208-1-1.html osdba 稍有积蓄 好友 博客 消息 论坛徽章 ...

  6. PostgreSQL 优势,MySQL 数据库自身的特性并不十分丰富,触发器和存储过程的支持较弱,Greenplum、AWS 的 Redshift 等都是基于 PostgreSQL 开发的

    PostgreSQL 优势 2016-10-20 21:36 686人阅读 评论(0) 收藏 举报  分类: MYSQL数据库(5)  PostgreSQL 是一个自由的对象-关系数据库服务器(数据库 ...

  7. postgresql 和 mysql 数据库备份恢复以及时区问题

    概要 postgesql 12 备份/恢复脚本 时区设置 mysql 5.6 备份/恢复脚本 时区设置 概要 postgresql 和 mysql 是最常用的 2 种开源关系数据库, 很多项目也会优先 ...

  8. PostgreSQL 和 MySQL 在用途、好处、特性和特点上的异同

    PostgreSQL 和 MySQL 在用途.好处.特性和特点上的异同. PostgreSQL 和 MySQL 是将数据组织成表的关系数据库.这些表可以根据每个表共有的数据链接或关联.关系数据库使您的 ...

  9. PostgreSQL 与 MySQL 相比,优势何在?

    一. PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃.断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统 ...

  10. PostgreSQL和MYsql的对比

    一.postgresql多进程,mysql多线程 二.postgresql和它配套的开源软件非常多,容易进行负载均衡 三.posgresql代码简介,mysql比较混乱 四.最重要的,postgres ...

随机推荐

  1. java解析网页的内容

    有时候,我们需要在java程序中获取一个连接,然后解析连接后,获取连接返回的内容结果来解析.准确的说是解析一个链接. 以下代码时解析百度首页的链接,获取的html代码的效果: public stati ...

  2. NOI2011 NOI嘉年华

    http://www.lydsy.com/JudgeOnline/problem.php?id=2436 首先离散化,离散化后时间范围为[1,cnt]. 求出H[i][j],表示时间范围在[i,j]的 ...

  3. 什么是空间复杂度(What is actually Space Complexity ?)

    属于空间复杂度(Space Complexity)在很多情况下被错认为是附属空间(Auxiliary Space),下面是附属空间和空间复杂度的定义. 附属空间(Auxiliary Space)是算法 ...

  4. SQL 使用经验

    1. 写存储过程,Update数据库表,一定要根据idRow,也就是主键唯一键来更新. 更新操作,如果根据其他条件更新,之后就有的忙活了. 2. Query语句要加NOLOCK

  5. java 字符串为空问题

    java 字符串为空问题 String testStr = null; System.out.println(testStr); if (testStr == null) { System.out.p ...

  6. NetAnalyzer笔记 之 三. 用C++做一个抓包程序

    [创建时间:2015-08-27 22:15:17] NetAnalyzer下载地址 经过前两篇的瞎扯,你是不是已经厌倦了呢,那么这篇让我们来点有意思的吧,什么,用C#.不,这篇我们先来C++的 Wi ...

  7. AAM(Active Appearance Model)算法介绍

    前面介绍ASM算法(http://blog.csdn.net/carson2005/article/details/8194317)的时候,笔者提到,ASM是基于统计形状模型的基础上进行的,而AAM则 ...

  8. Android Action Bar 详解篇 .

    作者原创,转载请标明出处:http://blog.csdn.net/yuxlong2010 作为Android 3.0之后引入的新的对象,ActionBar可以说是一个方便快捷的导航神器.它可以作为活 ...

  9. OLE操作Excel编译错误处理

      Excel在公司用的很多,而这个东西我用的不是很好,就想用程序来处理,遇到很多错误.这几天研究了下OLE操作Excel.环境:VS2008 SP1+Excel 2007 加入OLE Type Li ...

  10. QtWebkit2.2.0 HTML5.0支持情况

      Canvas: 支持element, 2d context以及文本 解析规则:支持 HTML5 tokenizer/tree building,  SVG in text/html, MathML ...