MySQL 和 PostgreSQL 的比较
特性
MySQL PostgreSQL
实例
通过执行 MySQL 命令(mysqld)启动实例。一个实例
可以管理一个或多个数据库。一台服务器可以运行多个
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 索引。