- 浏览: 1468438 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
getelephantbyid:
make 无法通过.....
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
getelephantbyid:
patch -p1 ../php-5.4.7_thttpd-2 ...
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
zander:
zander 写道c 语言是静态类型语言还是动态类型语言阅读理 ...
什么是动态语言和静态语言? -
zander:
c 语言是静态类型语言还是动态类型语言
什么是动态语言和静态语言? -
lunajiayou:
很有道理,赞一个
跟着苍蝇会找到厕所,跟着蜜蜂会找到花朵
转:http://bbs.chinaunix.net/thread-1688208-1-2.html
特性 | MySQL | PostgreSQL |
实例 | 通过执行 MySQL 命令(mysql d)启动实例。一个实例可以管理一个或多个数据库 。一台服务器 可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。 |
通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据 库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。一台机器上可以启动多个实例。 |
数据库 | 数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统 编目。 | 数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。 |
数据缓冲区 | 通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存 缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务 器上,这个参数最高可以设置为机器物理内存量的 80%。 | Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置 postgresql.conf 文件 中的 shared_buffers 参数来更新缓冲区缓存。 |
数据库连接 | 客户机使用 CONNECT 或 USE 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 | 客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 |
身份验证 | MySQL 在数据库级管理身份验证。 基本只支持密码认证 。 | PostgreSQL 支持丰富的认证方法:信任认证、口令认证、Kerberos 认证、基于 Ident 的认证、LDAP 认证、PAM 认证 |
加密 | 可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT 和 AES_DECRYPT 函数对列数据进行加密和解密。可以通过 SSL 连接实现网络 加密。 | 可以使用 pgcrypto 库中的函数对列进行加密/解密。可以通过 SSL 连接实现网络加密。 |
审计 | 可以对 querylog 执行 grep。 | 可以在表上使用 PL/pgSQL 触发器来进行审计。 |
查询解释 | 使用 EXPLAIN 命令查看查询的解释计划。 | 使用 EXPLAIN 命令查看查询的解释计划。 |
备份、恢复和日志 | InnoDB 使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。需要第三方软件 才能支持热备份。 | 在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。 可以支持热备份。 |
JDBC 驱动程序 | 可以从 参考资料 下载 JDBC 驱动程序。 | 可以从 参考资料 下载 JDBC 驱动程序。 |
表类型 | 取决于存储引擎。例如,NDB 存储引擎支持分区表,内存引擎支持内存表。 | 支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。 由于PostgreSQL的表分区是通过表继承和规则系统完成了,所以可以实现更复杂的分区方式。 |
索引类型 | 取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。 | 支持 B-树、哈希、R-树和 Gist 索引。 |
约束 | 支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 | 支持主键、外键、惟一、非空和检查约束。 |
存储过程和用户定义函数 | 支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL、C 和 C++ 编写。 | 没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 编写。 |
触发器 | 支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 | 支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。 |
系统配置文件 | my.conf | Postgresql.conf |
数据库配置 | my.conf | Postgresql.conf |
客户机连接文件 | my.conf | pg_hba.conf |
XML 支持 | 有限的 XML 支持。 | 有限的 XML 支持。 |
数据访问和管理服务器 |
OPTIMIZE TABLE
—— 回收未使用的空间并消除数据文件的碎片 myisamchk -analyze —— 更新查询优化器所使用的统计数据(MyISAM 存储引擎) mysql —— 命令行工具 MySQL Administrator —— 客户机 GUI 工具 |
Vacuum
—— 回收未使用的空间 Analyze —— 更新查询优化器所使用的统计数据 psql —— 命令行工具 pgAdmin —— 客户机 GUI 工具 |
并发控制 | 支 持表级和行级锁。InnoDB 存储引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 语句在事务级设置隔离级别。 | 支
持表级和行级锁。支持的 ANSI 隔离级别是 Read Committed(默认 —— 能看到查询启动时数据库的快照)和
Serialization(与 Repeatable Read 相似 —— 只能看到在事务启动之前提交的结果)。使用 SET
TRANSACTION 语句在事务级设置隔离级别。使用 SET SESSION 在会话级进行设置。 |
PostgreSQL主要优势:
1.
PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了
PostgreSQL数据库不会被其它公司控制。oracle数据库不用说了,是商业数据库,不开放。而MySQL数据库虽然是开源的,但现在随着SUN
被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制
的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。所以如果MySQL的市场范围与oracle数据库的市场范
围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。
2. 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster
、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案
,而这在MySQL下则比较困难。
3. PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。所以很多公司都是基本PostgreSQL做二次开发
的。
4.
PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线
程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是
MySQL的线程无法充分利用CPU
的能力。
目前只想到这些,以后想到再添加,欢迎大家拍砖。
PostgreSQL与oracle或InnoDB的多版本实现的差别
PostgreSQL与oracle或InnoDB的多版本实现最大的区别在于最新版本和历史版本是否分离存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分离了数据,索引本身没有分开。
PostgreSQL的主要优势在于:
1.
PostgreSQL没有回滚段,而oracle与innodb有回滚段,oracle与Innodb都有回滚段。对于oracle与Innodb来说,
回滚段是非常重要的,回滚段损坏,会导致数据丢失,甚至数据库无法启动的严重问题。另由于PostgreSQL没有回滚段,旧数据都是记录在原先的文件
中,所以当数据库异常crash后,恢复时,不会象oracle与Innodb数据库那样进行那么复杂的恢复,因为oracle与Innodb恢复时同步
需要redo和undo。所以PostgreSQL数据库在出现异常crash后,数据库起不来的几率要比oracle和mysql小一些。
2. 由于旧的数据是直接记录在数据文件中,而不是回滚段中,所以不会象oracle那样经常报ora-01555错误。
3. 回滚可以很快完成,因为回滚并不删除数据,而oracle与Innodb,回滚时很复杂,在事务回滚时必须清理该事务所进行的修改,插入的记录要删除,更新的记录要更新回来(见row_undo函数),同时回滚的过程也会再次产生大量的redo日志。
4. WAL日志要比oracle和Innodb简单,对于oracle不仅需要记录数据文件的变化,还要记录回滚段的变化。
PostgreSQL的主要劣势在于:
1、最新版本和历史版本不分离存储,导致清理老旧版本需要作更多的扫描,代价比较大,但一般的数据库都有高峰期,如果我们合理安排VACUUM,这也不是很大的问题,而且在PostgreSQL9.0中VACUUM进一步被加强了。
2、由于索引中完全没有版本信息,不能实现Coverage index scan,即查询只扫描索引,直接从索引中返回所需的属性,还需要访问表。而oracle与Innodb则可以;
PostgreSQL9.0中的特色功能:
PostgreSQL中的Hot Standby功能
也就是standby在应用
日志同步时,还可以提供只读服务,这对做读写分离很有用。这个功能是oracle11g才有的功能。
PostgreSQL异步提交(Asynchronous Commit)的功能
:
这个功能oracle中也是到oracle11g
R2才有的功能。因为在很多应用场景中,当宕机时是允许丢失少量数据的,这个功能在这样的场景中就特别合适。在PostgreSQL9.0中把
synchronous_commit设置为false就打开了这个功能。需要注意的是,虽然设置为了异步提交,当主机宕机时,PostgreSQL只会
丢失少量数据,异步提交并不会导致数据损坏而数据库起不来的情况。MySQL中没有听说过有这个功能。
PostgreSQL中索引的特色功能
:
PostgreSQL中可以有部分索引,也就是只能表中的部分数据做索引,create index 可以带where 条件。同时PostgreSQL中的索引可以反向扫描,所以在PostgreSQL中可以不必建专门的降序索引了。
评论
在pgsql如果你需要额外的特殊事务控制,可以使用savepoint
这个特性有点奇怪,在一个论坛里见到一班人在讨论一个问题,其中一个人就提到了事务的原子性就是需要这种“一有错误即需rollback”的要求。当然,这个特性是好是坏就见仁见智了。
发表评论
-
mysql报Could not open file '/var/log/mysql/error.log' for error logging: Permissi
2018-12-04 12:35 10300报错的原因是我用转链接把/var/log/目录链接到了其它地方 ... -
postgresql advisory lock实现秒杀
2018-10-21 20:28 1050https://yq.aliyun.com/articles/ ... -
postgresql触发器old的使用
2018-08-30 20:07 2453在insert语句中old的值是null,如果访问null ... -
redis安装
2018-04-30 18:19 394下载最新的msi安装文件 https://github. ... -
monodb安装
2018-04-30 17:57 1275下载https://www.mongodb.com/down ... -
yii2 advanced安装
2017-12-23 01:37 672安装composer https://getcompos ... -
索引与优化like查询
2012-09-17 19:57 10831. like %keyword 索引失效,使用全表扫描 ... -
PostgreSQL中hash索引可能损坏
2010-12-30 22:05 1307http://postgresql.1045698.n5.na ... -
深入理解数据库日志系统原理
2010-12-30 21:29 1563深入理解数据库日志系统原理 一:事务系统 ... -
PostgreSQL配置优化
2010-12-30 14:45 3455PG的配置文件是数据库 目录下的postgresq ... -
存储程序的稳定性以及对索引的影响
2010-12-17 12:51 1006每个函数都有一个易失 ... -
php读取数据库二进制字段
2010-12-03 22:57 1609create table btest(id serial pr ... -
PgSQL数据库分区
2010-11-18 19:49 4643PgSQL数据库分区 :分区的意思就是把逻辑上的一个大表分割 ... -
PostgreSQL可以弥补MySQL数据库的哪些缺点
2010-11-14 15:19 3146转:http://blog.chinaunix.net/u2/ ... -
PostgreSQL帖子汇总
2010-11-12 22:34 1135http://bbs.chinaunix.net/viewth ... -
PostgreSQL 8.3.1 全文检索(Full Text Search)
2010-11-12 18:58 1824转自:http://www.blogjava.net/agun ... -
使用postgreSQL+bamboo搭建比lucene方便N倍的全文搜索
2010-11-12 18:50 3558所有用到到包有: cmake-2.6.4.tar.gz (编 ... -
PostgreSql的Bamboo全文索引扩展
2010-11-12 18:49 1176http://code.google.com/p/nlpbam ... -
PostgreSql查看索引
2010-11-11 17:59 9220select * from pg_indexes where ... -
PostgreSql日志记录执行计划
2010-11-11 00:35 1715postgresql.conf配置中加入如下行 sha ...
相关推荐
### PostgreSQL 与 MySQL 比较 #### 一、启动实例 **MySQL**: MySQL通过执行`mysqld`命令启动实例。一个实例可以管理一个或多个数据库,并且一台服务器可以运行多个`mysqld`实例。一个实例管理器能够监控各个`...
#### 一、MySQL与PostgreSQL对比概览 PostgreSQL与MySQL作为两种最流行的开源关系型数据库管理系统,在技术特性、应用场景及社区支持方面存在诸多不同。本篇将从多个角度深入探讨这两种数据库的特点及其适用场景。 ...
### MySQL与PostgreSQL对比分析 #### 一、实例与服务管理 **MySQL**与**PostgreSQL**在实例和服务管理方面存在显著差异。MySQL通过执行`mysqld`命令启动实例,一个实例能够管理一个或多个数据库,且一台服务器可...
MySQL、PostgreSQL、Oracle比较; 数据库基础知识.ppt
《PostgreSQL与MySQL的比较研究初探》这篇文章探讨了两种主流的开源数据库系统——PostgreSQL和MySQL之间的差异,主要从标识列、字符串类型、JSP/Servlet开发中的中文处理、多平台支持和性能等方面进行了综合分析。...
PostgreSQL和MySQL协议简介 一、网络协议概述 PostgreSQL和MySQL协议是数据库网络协议,属于OSI模型的应用层协议。网络协议是通信双方必须遵守的一组约定,包括语法、语义和时序三个要素。其中语法规定数据和控制...
在使用Nacos与PostgreSQL集成时,需要注意的是,PostgreSQL的语法和一些特性可能与MySQL略有不同,所以在配置Nacos和执行SQL脚本时要确保与数据库兼容。对于MySQL,由于其广泛使用,社区支持丰富,通常集成过程会...
标题“dbconvert_mysql_postgresql.zip”表明这是一款用于数据库转换的工具,主要功能是从PostgreSQL数据库转换到MySQL数据库。在IT行业中,数据迁移是常见的需求,尤其是在不同的数据库系统之间。PostgreSQL是一种...
mysql2postgresql, 转换mysql模式到 PostgreSQL mysql2postgresql转换mysql模式和数据到 PostgreSQL用法使用命令在xml格式中创建转储: mysqldump --xml -u USER_NAME DB_NAME> DUMP_FILE_NAME
国外大牛写的一个mysql数据库转换postgresql的脚本。亲试可以无错误运行。
【标题】"mybatis - 代码生成(postgresql\mysql)" 涉及到的是MyBatis框架在数据库代码自动化生成方面的应用,针对PostgreSQL和MySQL两大主流关系型数据库。这个话题涵盖了数据库的逆向工程,以及生成的各类Java...
本文档对比了PostgreSQL和MySQL的数据类型,包括BIT、BOOLEAN、CHAR、DATE、DATETIME、DECIMAL、FLOAT、INTEGER、TEXT、TIME、TIMESTAMP、VARCHAR等类型的详细说明。 BIT数据类型:在PostgreSQL中,BIT类型用于...
**MySQL与PostgreSQL** MySQL和PostgreSQL都是流行的开源关系型数据库管理系统。MySQL以其易用性和速度而受到欢迎,适合处理大量并发读写操作。PostgreSQL则以其强大的事务支持、复杂查询能力和ACID(原子性、一致性...
nacos1.4.0部署包,可以直接在windows和linux运行,兼容mysql和postgresql。修改nacos源码请查看本文章:https://blog.csdn.net/zxfmamama/article/details/117293712
C#提供了ADO.NET(ActiveX Data Objects .NET)框架,它是一组用于访问数据的类库,允许开发者与多种数据库系统进行交互,包括MySQL和PostgreSQL。ADO.NET提供了如SqlConnection、SqlDataAdapter和SqlCommand等类,...
在本文中我们选用MySQL 4.0.2-alpha与PostgreSQL 7.2进行比较,这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会...
- PostgreSQL的数据类型与MySQL类似,但有其独特的特点。例如,BIT和VARBIT支持位串,BYTEA用于存储大型二进制对象,BIGSERIAL和SERIAL则用于自增整数,而且提供了TIMESTAMP WITH TIME ZONE和WITHOUT TIME ZONE来...
MySQL与PostgreSQL数据库高可用分析实践 本文档详细介绍了MySQL和PostgreSQL数据库高可用的分析实践,涵盖了高可用原理、MySQL高可用和PostgreSQL高可用等方面的知识点。 一、高可用原理 高可用是指系统在无中断...