赞
踩
目录
(1)简介
PostgreSQL 是一个功能强大的开源对象关系数据库管理系统(ORDBMS), 用于安全的存 储数据,允许在处理请求时检索它们,是跨平台的,可以在日常的大部分操作系统运行。
(2)特点
①跨平台,支持所有主要操作系统
②支持文本、图像、声音和视频,并包括用于C/C++ 、Perl、Java、Python、Ruby、
Tcl和开放数据库连接(ODBC)的编程接口
③支持Sql许多功能 如:复杂Sql查询、Sql子选择、外键、触发器、视图、事务、
多进程并发控制(MVCC),流式复制(9.0)、热备(9.0)
④表可以设置为从“父”表继承其特征(9.x版本)。
⑤可以安装多个扩展,添加附加功能。
(3)软 件
① PSQL : 是一个命令行工具,也是管理PostgreSQL的主要工具;
② pgAdmin : 是PostgreSQL的免费开源图形用户界面管理工具;
③ pgFouine : 是一个日志分析器,可以从PostgreSQL日志文件创建报告。
(4)下载
https://www.postgresql.org/download/
(5)psql命令详解
psql -h <hostname or ip> -p <端口> [数据库名称] [用户名称]
- **psql常用连接参数**
-
- 缩写 说明
- -h 数据库服务器主机
- -p 数据库服务器端口
- -U 数据库用户名
- -d 连接的数据库名称
- -c 运行一条sql命令, 然后退出
- -f 执行文件中的命令, 然后退出
- -l 列出可用的数据库, 然后退出
- -V 输出版本信息,然后退出
- -q 没有多余消息,只有查询输出
- -H 查询结果以HTML表格形式输出
-
psql命令:
- 常用命令 说明
- \q 退出命令行
- \l 查看数据库列表
- \c 切换数据库
- \x 查询结果横纵显示切换
- \s 查看命令历史记录
- \h 查看所有的sql关键字
- \? 命令行操作的帮助
- \i 执行sql文件
- \timing 执行SQL消耗时间开关
- \encoding 显示字符集
- \pset border 0 输出内容无边框
- \pset border 1 边框只在内部存在
- \pset border 2 内外都有边框
- \d命令 说明
- \d 显示表、索引和视图
- + 显示更多的信息包括表和列的注释等相关信息
- \da 显示所有可用聚集函数,以及它们操作的数据类型
- \dA 显示访问方法
- \dAc 显示方法子类别
- \dAf 显示方法家庭
- \dAo 显示方法家庭的操作员
- \dAp 显示方法家庭的支持功能
- \db 显示所有的表空间
- \dc 显示所有字符集之间的可用转换
- \dC 显示所有类型转换
- \dd 显示所有可视对象,或所有匹配 pattern 的描述
- \dD 显示所有可用域
- \ddp 显示默认权限
- \deu 显示用户映射
- \df 显示匹配的函数(存储过程)
- \dF 显示文本搜索配置
- \dFd 显示文字搜索字典
- \dFp 显示文本搜索解析器
- \dFt 显示文字搜索模板
- \dg 显示角色
- \di 显示匹配的索引
- \dl 显示一个大对象的列表,与\lo_list相同
- \dL 显示程序语言
- \dm 显示物化视图
- \dn 显示所有可用模式(名字空间)
- \do 显示所有可用操作符,以及它们的操作数和返回的数据类型
- \dO 显示排序规则
- \dp 显示表,视图和序列访问权限
- \drds 显示每个数据库的角色设置
- \ds 显示匹配的序列
- \dt 显示匹配的表
- \dT 显示数据类型
- \du 显示角色
- \dv 显示匹配的视图
- \dx 列表扩展
- \dy 显示事件触发器
(6)PostgreSQL数据库命令
常用命令:
- CREATE DATABASE exampledb OWNER dbuser; #创建用户数据库
- GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser; #将exampledb数据库的所有权限都赋予dbuser
- \c dbname #切换数据库,相当于mysql的use dbname
- \dt #列举表,相当于mysql的show tables
- \d tblname #查看表结构,相当于desc tblname,show columns from tbname
- \di #查看索引
- DROP DATABASE phone; # 删除数据库
- DROP DATABASE phone with (force); # 强制删除数据库
- create table test(id integer not null primary key); #创建表(大小写均可)
- alter table phone add column phone_number character varying(11) not null; #添加表的字段
- alter table [表名A] rename to [表名B]; #重命名一个表
- drop table [表名]; #删除一个表
- alter table [表名] add column [字段名] [类型]; #在已有的表里添加字段
- alter table [表名] drop column [字段名]; # 删除表中的字段
- alter table [表名] rename column [字段名A] to [字段名B]; #重命名一个字段
- alter table [表名] alter column [字段名] set default [新的默认值]; #给一个字段设置缺省值
- alter table [表名] alter column [字段名] drop default; #去除缺省值
- insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
- //eg: insert into phone(id, phone_number) values(1, 18819259295); #在表中插入数据
- update [表名] set [目标字段名]=[目标值] where [该行特征];
- eg: update phone set phone_number = replace('phone_number','8', '1'); #修改表中的某行某列的数据
- delete from [表名] where [该行特征];
- delete from [表名];--删空整个表 #删除表中某行数据
- create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;); #创建表
- SELECT * FROM pg_stat_activity; #查看次数据库的连接
-
数据导入导出:
- 数据导出:
- pg_dump:将一个PostgreSQL数据库转储到一个脚本文件或者其它归档文件中
-
- pg_dump mydb > db.sql:将mydb数据库转储到一个 SQL 脚本文件
-
- pg_dump mydb -s > db.sql:将mydb数据库转储到一个 SQL 脚本文件(只导出数据库表结构,不带数据)
-
- pg_dump -D -a -t zones_seq - t interway -t table_3 ... > /tmp/zones_seq.sql:导出部分表,支持通配符,见参考文章1
-
- pg_dumpall:将一个PostgreSQL数据库集群转储到一个脚本文件中
-
- 数据导入:
- psql:psql -U gpadmin -d your-db -f your-table.sql
- pg_restore: pg_restore -d your-db your-table.tar
-
补充:
pg_dump -h 10.32.176.82 -p 5432 -U postgres -d sonarqube -f /tmp/sonarqube.sql #数据库备份
- createdb -h 10.32.176.82 -p 5432 -U postgres sonarqube
- psql -h 10.32.176.82 -p 5432 -U postgres -d sonarqube -f sonarqube.sql #数据库恢复
(7)PostgreSQL 与MySQL的区别
①MySQL
MySQL声称自己是最流行的开源数据库。LAMP中的M指的就是MySQL。构建在LAMP上的应用都会使用MySQL,如WordPress、Drupal等大多数php开源程序。MySQL最初是由MySQL AB开发的,然后在2008年以10亿美金的价格卖给了Sun公司,Sun公司又在2010年被Oracle收购。Oracle支持MySQL的多个版本:Standard、Enterprise、Classic、Cluster、Embedded与Community。其中有一些是免费下载的,另外一些则是收费的。其核心代码基于GPL许可,由于MySQL被控制在Oracle,社区担心会对MySQL的开源会有影响,所以开发了一些分支,比如: MariaDB和Percona。
② PostgreSQL
PostgreSQL标榜自己是世界上最先进的开源数据库。PostgreSQL的一些粉丝说它能与Oracle相媲美,而且没有那么昂贵的价格和傲慢的客服。最初是1985年在加利福尼亚大学伯克利分校开发的,作为Ingres数据库的后继。PostgreSQL是完全由社区驱动的开源项目。它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版。PostgreSQL基于自由的BSD/MIT许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。
③MySQL与PostgreSQL的对比
MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。这样的两种背景直接导致了各自固有的优点和缺点。
④PostgreSQL相对于MySQL的优势
1)不仅仅是关系型数据库
除了存储正常的数据类型外,还支持存储:
json和jsonb之间的区别
jsonb和json在更高的层面上看起来几乎是一样的,但在存储实现上是不同的。
当我们比较写入数据速度时,由于数据存储的方式的原因,jsonb会比json稍微的慢一点。json列会每次都解析存储的值,这意味着键的顺序要和输入的时候一样。但jsonb不同,以二进制格式存储且不保证键的顺序。因此,如果你有软件需要依赖键的顺序,jsonb可能不是你的应用的最佳选择。使用jsonb的优势还在于你可以轻易的整合关系型数据和非关系型数据, PostgreSQL对于mongodb这类的基于文档的数据库是个不小的威胁,毕竟如果一个表中只有一列数据的类型是半结构化的,没有必要为了迁就它而整个表的设计采用schemaless的结构。
2)支持地理信息处理扩展
PostGIS 为PostgreSQL提供了存储空间地理数据的支持,使PostgreSQL成为了一个空间数据库,能够进行空间数据管理、数量测量与几何拓扑分析。在功能上,和MYSQL对比,PostGIS具有下列优势:
O2O业务场景中的LBS业务使用PostgreSQL + PostGIS有无法比拟的优势。
3)可以快速构建REST API
PostgREST 可以方便的为任何 PostgreSQL 数据库提供完全的 RESTful API 服务。
4)支持树状结构
支持R-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。MySQL 处理树状的设计会很复杂, 而且需要写很多代码, 而 PostgreSQL 可以高效处理树结构。
5)有极其强悍的 SQL 编程能力
支持递归,有非常丰富的统计函数和统计语法支持。
6)外部数据源支持
可以把 70 种外部数据源 (包括 Mysql, Oracle, CSV, hadoop …) 当成自己数据库中的表来查询。Postgres有一个针对这一难题的解决方案:一个名为“外部数据封装器(Foreign Data Wrapper,FDW)”的特性。该特性最初由PostgreSQL社区领袖Dave Page四年前根据SQL标准SQL/MED(SQL Management of External Data)开发。FDW提供了一个SQL接口,用于访问远程数据存储中的远程大数据对象,使DBA可以整合来自不相关数据源的数据,将它们存入Postgres数据库中的一个公共模型。这样,DBA就可以访问和操作其它系统管理的数据,就像在本地Postgres表中一样。例如,使用FDW for MongoDB,数据库管理员可以查询来自文档数据库的数据,并使用SQL将它与来自本地Postgres表的数据相关联。借助这种方法,用户可以将数据作为行、列或JSON文档进行查看、排序和分组。他们甚至可以直接从Postgres向源文档数据库写入(插入、更细或删除)数据,就像一个一体的无缝部署。也可以对Hadoop集群或MySQL部署做同样的事。FDW使Postgres可以充当企业的中央联合数据库或“Hub”。
7)没有字符串长度限制
一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而PostgreSQL的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。MySQL 的各种text字段有不同的限制,要手动区分 small text, middle text, large text… PostgreSQL 没有这个限制,text 能支持各种大小。
8)支持图结构数据存储
没有具体使用过,具体可以自己搜索下。参考链接:https://mp.weixin.qq.com/s/cjor82wgDu5gzDvTYpLDWw
9)支持窗口函数
窗口函数提供跨行相关的当前查询行集执行计算的能力。仅当调用跟着OVER子句的聚集函数,作为窗口函数;否则它们作为常规的聚合函数。窗口也是一种分组,但和 group by 的分组不同。窗口,可以提供分组之外,还可以执行对每个窗口进行计算。可以相像成是group by 后,然后对每个分组进行计算,而不像Group by ,只是单纯地分组。MySQL 不支持 OVER 子句, 而PostgreSQL支持。OVER 子句能简单的解决 “每组取 top 5” 的这类问题。MySQL支持的SQL语法(ANSI SQL标准)的很小一部分。不支持递归查询、通用表表达式(Oracle的with 语句)或者窗口函数(分析函数)。
10)对索引的支持更强
PostgreSQL 的可以使用函数和条件索引,这使得PostgreSQL数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。对于索引类型:
InnoDB的表和索引都是按相同的方式存储。也就是说表都是索引组织表。这一般要求主键不能太长而且插入时的主键最好是按顺序递增,否则对性能有很大影响。PostgreSQL不存在这个问题。
索引类型方面,MySQL取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。PostgreSQL支持 B-树、哈希、R-树和 Gist 索引。
11)集群支持更好
Mysql Cluster可能与你的想象有较大差异。开源的cluster软件较少。复制(Replication)功能是异步的并且有很大的局限性。例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master。
PostgreSQL有丰富的开源cluster软件支持。plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
另外,PostgreSQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。
12)事务隔离做的更好
MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新, 得加锁才可以, 但悲观锁会影响性能, 手动实现乐观锁又复杂. 而 PostgreSQL 的列里有隐藏的乐观锁 version 字段, 默认的 repeatable read 级别就能保证并发更新的正确性, 并且又有乐观锁的性能。
13)对于字符支持更好一些
MySQL 里需要 utf8mb4 才能显示 emoji 的坑, PostgreSQL 没这个坑。
14)对表连接支持较完整
对表连接支持较完整,MySQL只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge join)与散列连接(hash join)。PostgreSQL都支持。
15)存储方式支持更大的数据量
PostgreSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
16)时间精度更高
MySQL对于时间、日期、间隔等时间类型没有秒以下级别的存储类型,而PostgreSQL可以精确到秒以下。
17)优化器的功能较完整
MySQL对复杂查询的处理较弱,查询优化器不够成熟,explain看执行计划的结果简单。性能优化工具与度量信息不足。
PostgreSQL很强大的查询优化器,支持很复杂的查询处理。explain返回丰富的信息。提供了一些性能视图,可以方便的看到发生在一个表和索引上的select、delete、update、insert统计信息,也可以看到cache命中率。网上有一个开源的pgstatspack工具。
18)序列支持更好
MySQL 不支持多个表从同一个序列中取 id, 而 PostgreSQL 可以。
19)对子查询支持更好
对子查询的支持。虽然在很多情况下在SQL语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。而且使用子查询的SQL语句与使用带条件的多表连接相比具有更高的程序可读性。几乎任何数据库的子查询 (subquery) 性能都比 MySQL 好。
20)增加列更加简单
MySQL表增加列,基本上是重建表和索引,会花很长时间。PostgreSQL表增加列,只是在数据字典中增加表定义,不会重建表.
MySQL相对于PostgreSQL的优势
1)MySQL比PostgreSQL更流行
流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。易用,很容易安装。第三方工具,包括可视化工具,让用户能够很容易入门。
2)回滚实现更优
innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀。
3)在Windows上运行更可靠
与PostgreSQL相比,MySQL更适宜在Windows环境下运行。MySQL作为一个本地的Windows应用程序运行(在 NT/Win2000/WinXP下,是一个服务),而PostgreSQL是运行在Cygwin模拟环境下。PostgreSQL在Windows下运行没有MySQL稳定,应该是可以想象的。
4)线程模式相比进程模式的优势
MySQL使用了线程,而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。
5)权限设置上更加完善
MySQL在权限系统上比PostgreSQL某些方面更为完善。PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的 INSERT、SELECT和UPDATE/DELETE的授权,而MySQL允许你定义一整套的不同的数据级、表级和列级的权限。对于列级的权限, PostgreSQL可以通过建立视图,并确定视图的权限来弥补。MySQL还允许你指定基于主机的权限,这对于目前的PostgreSQL是无法实现的,但是在很多时候,这是有用的。
6)存储引擎插件化机制
MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。
7)适应24/7运行
MySQL可以适应24/7运行。在绝大多数情况下,你不需要为MySQL运行任何清除程序。PostgreSQL目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次VACUUM。
8)更加试用于简单的场景
PostgreSQL只支持堆表,不支持索引组织表,Innodb只支持索引组织表。
由于索引组织表是按一个索引树,一般它访问数据块必须按数据块之间的关系进行访问,而不是按物理块的访问数据的,所以当做全表扫描时要比堆表慢很多,这可能在OLTP中不明显,但在数据仓库的应用中可能是一个问题。
(1)离线安装包准备
①首先可以访问网址
https://yum.postgresql.org/13/redhat/rhel-7-x86_64/repoview/postgresqldbserver13.group.html
来下载对应的离线安装包文件,具体的示例截图如下:
②通常情况下,需要下载如下几个RPM安装包:
postgresql13-13.0-1PGDG.rhel7.x86_64
#安装扩展
postgresql13-contrib-13.0-1PGDG.rhel7.x86_64
#客户端进行连接.
postgresql13-libs-13.0-1PGDG.rhel7.x86_64
#数据库的安装文件
postgresql13-server-13.0-1PGDG.rhel7.x86_64
③注意:具体版本则需要根据自己的需要来进行选择,centos7对应于rhel7,如果是centos8 的话 选择 rhel8 进行下载。
④然后,就需要利用SSL工具将本地下载的RMP安装文件上传到CentOS7服务器。
(虽然服务器不能联网访问网站资源,但可以进行远程登录进行管理)。
(2)首先进入上述离线安装文件所在的目录,用ll命令查询一下安装包是否已经离线上传好
在postgresql13_rpm目录下,执行如下命令,进行安装包的安装:
yum localinstall *.rpm
(3)期间可能会访问网络,但不影响安装,在提示是否确认安装时,选择y确认安装,等待安装即可。成功安装完postgresql 13 数据库之后,会自动创建一个服务,可以看一下名为postgresql-13的服务,使用如下命令进行服务状态查看:
systemctl status postgresql-13
首次安装后,此命令会显示相关的文件信息:
Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
(4)可以通过cat命令查看此文件的内容,其中包含相关的数据存储目录信息:
cat /usr/lib/systemd/system/postgresql-13.service
- Location of database directory
- Environment=PGDATA=/var/lib/pgsql/13/data/
- #程序目录
- ExecStart=/usr/pgsql-13/bin/postmaster -D ${PGDATA}
(1)有了数据库的数据存储目录和程序所在目录,可以使用如下命令进行数据库的初始化工作,具体示例代码如下:
- su - postgres
- cd /usr/pgsql-13/bin/
- #初始化数据库
- ./initdb -D /var/lib/pgsql/13/data/
(2)成功执行命令后,需要退出postgres命令环境,用root 用户启动postgresql 服务,并且设置postgresql服务为自动启动,这样在服务器重启后,无需手动再启动postgresql 服务,具体命令如下:
systemctl enable postgresql-13 && systemctl restart postgresql-13
(3)最后,需要对PG数据库进行安全性方面的配置,比如修改密码,创建用户,设置登录策略等等,下面给出一些示例代码:
- su - postgres
- psql
(4)修改密码
alter role postgres with password 'your_root_pwd###';
(5)修改配置文件,配置登录策略等
- vim /var/lib/pgsql/12/data/pg_hba.conf
- #增加一行
- host all all 0.0.0.0/0 md5
注: trust 是免密, md5 是加密
(6)修改数据库其他配置信息
- vim /var/lib/pgsql/13/data/postgresql.conf
- listen_addresses = '*'
- max_connections = 700
(7)重启服务
systemctl restart postgresql-13
(8)重启后,再次查看数据库状态
systemctl status postgresql-13
(1)命令提示符前面的就是当前的数据库,使用 \l 查看当前的数据库列表
- su - postgres
- psql
- \l
(2)可以创建新的数据库
create database TEST with owner=postgres encoding='UTF-8';
(3)执行命令 \c 命令切换当前数据库为test
\c test
(4)执行 \d 可以查看当前数据库下的所有表
\d
(5)创建一张新表并再次查看
- CREATE TABLE school (
- id integer not null ,
- name character(32),
- number char(5),
- constraint sch_key primary key(id)
- );
(6)执行 \d school可以查看表的详细信息
\d school;
(7)执行 \q 退出数据库
\q
(1)背景
CentOS所在的服务器限于安全原因,客户并未给配置访问外网的权限,需在CentOS7 系统上离线安装PostgreSQL13数据库。
(2)离线安装包准备
(3) 离线安装
首先进入上述离线安装文件所在的目录,用ll命令查询一下安装包是否已经离线上传好,界面截图如下:
(4)在postgresql13_rpm目录下,执行如下命令,进行安装包的安装
(4)查看状态
期间可能会访问网络,但不影响安装,在提示是否确认安装时,选择y确认安装,等待安装即可。成功安装完postgresql 13 数据库之后,会自动创建一个服务,可以看一下名为postgresql-13的服务,使用如下命令进行服务状态查看:
首次安装后,此命令会显示相关的文件信息:
Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
(5)可以通过cat命令查看此文件的内容,其中包含相关的数据存储目录信息:
(6)数据库初始化
(7)成功执行命令后,需要退出postgres命令环境,用root 用户启动postgresql 服务,并且设置postgresql服务为自动启动,这样在服务器重启后,无需手动再启动postgresql 服务,具体命令如下:
(8)对PG数据库进行安全性方面的配置
①
②修改配置文件,配置登录策略等
注: trust 是免密, md5 是加密
③修改数据库其他配置信息
④重启服务
⑤重启后,再次查看数据库状态,命令如下:
(1)命令提示符前面的就是当前的数据库,使用 \l 查看当前的数据库列表:
(2)可以创建新的数据库:
(3)执行命令 \c 命令切换当前数据库为test:
(4)执行 \d 可以查看当前数据库下的所有表:
(5) 创建一张新表并再次查看:
(6)执行 \d school可以查看表的详细信息
(7)执行 \q 退出数据库
(1)新建连接
(2)测试连接
(3)连接
MySQL从一开始就没有打算做所有事情,因而它在功能方面有一定的局限性,并不能满足一些先进应用程序的要求。MySQL对某些功能(例如引用、事务、审计等)的实现方式使得它与其他的关系型数据库相比缺少了一些可靠性。对于简单繁重的读取操作,使用PostgreSQL可能有点小题大做,同时性能也比MySQL这样的同类产品要差。除非你需要绝对的数据完整性,ACID遵从性或者设计复杂,否则PostgreSQL对于简单的场景而言有点多余。
如何确定只在MySQL和PostgreSQL中进行选择,以下规则总是有效的:
①如果操作系统是Windows,你应该使用MySQL。
②当绝对需要可靠性和数据完整性的时候,PostgreSQL是更好的选择。
③如果需要数据库执行定制程序,那么可扩展的PostgreSQL是更好的选择。
④如果应用处理的是地理数据,由于R-TREES的存在,应该使用PostgreSQL。
⑤如果对数据库并不了十分了解,甚至不知道事务、存储过程等究竟是什么,应该使用MySQL。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。