Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90921997
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-21 14:54:15

From PgsqlWiki

Jump to: ,

 

 

 概述

伴随着显著的功能以及性能改进,此次发行标志了PostgreSQL的一个重大跨越。这都离不开一个成长中社区对于开发的强力推动。此次版本发行加入了许多主要的功能:

  • 全文搜索功能已集成到数据库核心之中
  • 对于SQL/XML标准的支持, 包含了新的操作符和xml数据类型
  • 枚举数据类型ENUM
  • 复合数据类型的数组
  • UUID数据类型
  • 加入了在排序时对NULL值出现先后的控制
  • 可更新游标
  • 可设置函数级的服务器配置参数
  • 用户自定义数据类型已可使用类型修饰符
  • 表定义改变或统计信息更新后自动重设已缓冲查询的查询方案
  • 日志及统计信息收集上的大量改进
  • 使用于Windows的SSPI认证支持
  • 多进程并行自动清理,以及其他自动清理的改进
  • 完整的PostgreSQL发行系统已可使用Microsoft Visual C++编译

以下列出了一些主要的性能改进,其中大部分都无需由用户改动或调整而自动达成:

  • 异步提交可以在事务提交时延迟写入预写日志
  • 检查点写入可分散与一个较长的时间端从而平滑每个检查点的IO峰波
  • “元组堆叠”(Heap-Only Tuples, HOT)加速了大多数UPDATE和DELETE语句的空间再利用
  • 及时后台写入策略(Just-in-time background writer strategy)提高了磁盘写入效率
  • 对于只读事务使用非持续事务ID减少了运行开支和数据库清理需求
  • 每元组和每字段的存储开支得到缩减
  • 大型的顺序扫描的不再冲刷常用缓存页
  • 并发的大型顺序扫描可共享磁盘读取操作
  • ORDER BY ... LIMIT可以无需排序操作

以上的项目在接下来的小节中将有更详细的说明。

 向8.3版本迁移

如欲从先前任何版本向此版本迁移,都必须通过使用pg_dump来转储/还原数据库。请注意以下一些不兼容之处:

常规

  • 非字符数据不再自动转换为TEXT类型(Peter, Tom) 之前如果一个非字符数据要充做接受text类型输入的操作符或函数的操作数时,对于大多数的内置数据类型(并非全部)它将会被自动转换为text。这种情况将不再发生,现在需要将非字符串数据类型显示转换为text。以这些以前工作的表达式为例:
    substr(current_date, 1, 4)
    23 LIKE '2%'
    现在将会分别导致“函数不存在”与“操作符不存在”的错误。使用显式转换替代:
    substr(current_date::text, 1, 4)
    23::text LIKE '2%'

    (当然,也可以使用完整的CAST()语法。)这样改动的理由是过度使用自动转换将会引发令人惊讶的行为。举个之前版本中的范例,这个表达式将被接受但并不像期望的那样工作:

    current_date < 2017-11-17

    这事实上是在将date与整数进行比较,应当(实际现在)被制止——在自动转换的情况下,操作符两边都被转换为text,发生了一个字符比较,因为对于这个表达式找不到比text < text更合适的<操作符。

    类型char(n)和varchar(n)依然被自动转换为text。同样,自动转换为text也依然对连接(||)操作符的输入有效,至少在有一边是字符串类型的情况下如此。
  • contrib/tsearch2提供的全文搜索功能已移入服务器核心,语法有稍许改变。contrib/tsearch2现在提供了一个兼容的使用界面。
  • ARRAY(SELECT ...) 当子查询返回0行时将返回一个空数组而非NULL(Tom)
  • 基本数据类型的数组类型名称不再一直是基本类型名称加上前缀与下划线旧的命名管理将尽可能依然可用,但程序代码不应当再依靠它。使用新的pg_type.typarray列来确认与给定类型关联的数组类型。
  • ORDER BY ... USING operator现在必须使用一个在btree操作符集中定义了的小于或大于operator 这个限制是为了避免不一致的结果。
  • SET LOCAL的改变将持续到最外层事务的终结,除非被回滚(Tom) 之前的版本中SET LOCAL的效果在子事务提交(RELEASE SAVEPOINT或退出一个PL/pgSQL异常处理块)的时候将丢失。
  • 在事务块中被拒绝的命令在多语句查询字符串中也将被拒绝(Tom) 比如"BEGIN; DROP DATABASE; COMMIT"现在即使作为单一查询执行也将被拒绝。
  • 在事务块外ROLLBACK将制造出NOTICE而不是WARNING(Bruce)
  • 防止NOTIFY/LISTEN/UNLISTEN接受带模式的完整名称(Bruce) 之前这些命令接受 模式.关系 但是却忽略模式部分,会导致混淆。
  • ALTER SEQUENCE不再影响序列currval()状态(Tom)
  • 外联键跨数据类型引用时必须符合可索引条件(Tom) 这样完善了语义完整性同时避免了性能问题。
  • 对象尺寸函数仅对有合理权限查看此类信息的用户可用(Tom) 举例而言,pg_database_size()现在需要CONNECT权限,该权限默认授予所有人。pg_tablespace_size()则需要所在表空间的CREATE权限,或表空间为数据库默认表空间时。
  • 去除了未入文档的!!= (not in)操作符(Tom) NOT IN (SELECT ...)是执行这类操作的恰当方式。
  • 内置散列函数分布更均匀(Tom) 如果程序代码使用PostgreSQL内部散列函数来计算与存储散列值,这写值必须重新生成。
  • 处理可变长数据的C编码约定已更改(Greg Stark, Tom) 必须用新的SET_VARSIZE()宏设置生成的varlena值的长度。同样,在更多的场合下可能需要展开("de-TOAST")输入的值。
  • 持续归档操作不再向服务器日志报告每次成功的归档操作除非使用了DEBUG等级(Simon)

 配置参数

  • 服务器管理参数的多处改变 bgwriter_lru_percent,bgwriter_all_percent,bgwriter_all_maxpages,stats_start_collector,与 stats_reset_on_server_start被去除。redirect_stderr更名为logging_collector。stats_command_string更名为track_activities。stats_block_level与stats_row_level合并入track_counts。一个新的布尔配置参数archive_mode用来控制归档。Autovacuum的默认设置已改变。
  • 去除stats_start_collector参数(Tom) 现在一直启动收集器进程,除非创建UDP套接字失败。
  • 去除stats_reset_on_server_start参数(Tom) pg_stat_reset()可用于此目的。
  • 注释掉postgresql.conf中的参数将会导致其回复为默认值(Joachim Wieland) 之前注释掉一个项目并不影响该参数的值直至服务器下次重启。

字符编码

  • 增加了对无效编码数据的检查(Andrew) 这个改变堵住了反斜杠转义字符处理以及COPY转义处理中的一些漏洞。现在去除转义的字符将被复查以确保不产生无效的多字节字符。
  • 不允许与服务器区域设置不一致的数据库编码(Tom) 在多数平台上,C区域设置(locale)是唯一能与任意数据库编码一起工作的区域。其他的区域设置意味着一个特殊的编码,当数据库编码与其不一致时将会导致异常行为。(典型的症状是错误的排序顺序以及upper()或lower()的错误结果。)现在服务器将会拒绝创建一个和区域编码设置不同的数据库。
  • 确保chr()不能创建一个无效编码的值(Andrew) 在UTF-8编码的数据库中,chr()的参数现在被作为Unicode编码值对待。在其他多字节编码环境中chr()的参数必须指示一个7位的ASCII字符。0不再被接受。ascii()也做了相应调整。
  • 调整了convert()的行为以确保编码有效(Andrew) 两个参数的convert()形式已被去除。三个参数形式从现在起接受betya类型的第一参数然后返回一个bytea。为了弥补损失的功能,新增了三个函数:
    • convert_from(bytea, name) returns text — 把第一个参数从name编码转换为数据库编码
    • convert_to(text, name) returns bytea — 把第一个参数从数据库编码转换为name编码
    • length(bytea, name) returns integer — 计算第一个参数作为name编码时的字符数
  • 去除了convert(argument USING conversion_name) (Andrew) 此行为不符合SQL标准。
  • JOHAB仅客户端可用(Tatsuo) JOHAB作为服务端编码不安全。

 改动列表

接下来的部分描述了PostgreSQL 8.3与先前的主要版本发布的详细改动。此部分共分为22个部分,分别是:

  1. Performance
  2. Server
  3. Monitoring
  4. Authentication
  5. Write-Ahead Log (WAL) and Continuous Archiving
  6. Queries
  7. Object Manipulation
  8. Utility Commands
  9. Data Types
  10. Functions
  11. PL/PgSQL Server-Side Language
  12. Other Server-Side Languages
  13. psql
  14. pg_dump
  15. Other Client Applications
  16. libpq
  17. ecpg
  18. Windows Port
  19. Server Programming Interface (SPI)
  20. Build Options
  21. Source Code
  22. Contrib

出于篇幅限制,便不在此赘述,如有兴趣,可参阅官方网站的在线手册

取自""
阅读(1145) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~