PostgreSQL7.0手册-用户手册-1. 简介

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 13:42:40
PostgreSQL
The PostgreSQL Development Team
Edited by
Thomas Lockhart
PostgreSQLis Copyright ?1996-2000 by PostgreSQL Inc. 

编译:何伟平  laser@zhengmai.com.cn 

中文译稿版权声明: 

本文的中文译稿版权属于其中文译稿作者。您可对本手册进行非商业用途的自由传播,但务必保证手册的完整性,转载时请保留本版权声明.由于译者水平有限,错误之处在所难免,希望各位用户指正.由此带来的一切后果,本人概不负责. 

第一章. 简介
内容 
何为 Postgres? 
 简单回顾 Postgres 
关于这个版本 
资源 
术语 
符号 
问题汇报指导 
Y2K 声明 
版权和商标 
这份文档是最初由加州大学伯克利分校开发的 PostgreSQL 数据库管理系统的用户手册.PostgreSQL以 Postgres release 4.2为基础。 当初由 Michael Stonebraker 教授领导的 Postgres  项目,是由高级防务研究项目局(Defense Advanced Research Projects Agency)(DARPA) , 陆军研究处 (ARO ), 国家科学基金会 (National Science Foundation)(NSF),和 ESL 公司赞助进行的。 
何为 Postgres?
传统的关系型数据库管理系统 ( DBMS ) 支持一个由命名关系(表)的集合(包括特定类型的属性/字段)组成的数据模型.在现代的商用系统中,可能的类型通常包括浮点数, 整数, 字符串, 金额及日期. 现在, 人们普遍认为这个模型已经不能满足未来的数据处理应用的需要了.而关系型模型成功地取代了以前的模型在某种程度上来说是因为它的简单. 当然,正如我们常说的, 简单通常会使某些应用的实现变得非常困难. Postgres 通过一种让用户可以很容易扩展系统的方法整合了下面四种基本概念,使其能提供可观的附加功能: 
   
 类/表(classes) 
继承(inheritance) 
类型(types) 
函数(functions) 

其他特性还提供了附加的功能和灵活性: 
   
 约束(constraints) 
触发器(triggers) 
规则(rules) 
事务完整(transaction integrity) 


这些特性将 Postgres 置于对象-关系 (object-relational) 型数据库的范畴. 请注意, 这是和那些所谓的面向对象(object-oriented) 的数据库不同的概念;面向对象型数据库通常并不适合于支持传统的关系型数据库语言. 所以, 尽管 Postgres 有一些面向对象的特性, 它仍然属于关系型数据库的范畴, 事实上, 一些商用数据库最近已经集成了一些 Postgres 所领先的特性.

--------------------------------------------------------------------------------
简单回顾 Postgres
--------------------------------------------------------------------------------

现在被称为 PostgreSQL 的对象-关系型数据库管理系统(有一段时间被称为Postgres95 )是从伯克利写的 Postgres 软件包发展而来的。经过十几年的发展,PostgreSQL世界上可以获得的最先进的开放源码的数据库系统,它提供了多版本并行控制,支持几乎所有 SQL 构件(包括子查询,事务和用户定义类型和函数),并且可以获得非常广阔范围的(开发)语言绑定(包括 C,C++,Java,perl,tcl,和python)。 
伯克利的 Postgres 项目
PostgresDBMS 的实现始于1986年, 该系统最初的概念详见 Postgres的设计.最早的数据模型定义见Postgres 数据模型.当时的规则系统设计在 Postgres 规则系统设计 里描述.存储管理器的理论基础和体系结构在 Postgres 存储系统 里有详细描述. 
从那以后, Postgres 经历了几次主要的版本更新.第一个演示性的系统在1987年便可用了, 并且在1988年的ACM-SIGMOD 大会上展出. 我们在1989年发布版本 1(在 Postgres的实现里有描述)给一些外部的用户使用.作为对第一个规则系统的批评的响应,(对 Postgres 规则系统的讨论),我们重新设计了规则系统(On Rules, Procedures, Caching and Views in Database Systems)并在1990年6月发布了使用新规则系统的版本 2. 版本 3 在1991年出现, 增加了多存储管理器的支持, 并且改进了查询执行器,重新编写了重写规则系统. 从那以后, 直到 Postgres95发布发布前(见下文),工作都集中在移植性和可靠性上。 

Postgres 已经被用于许多研究或实际的应用中去了.这些应用包括: 一个财务数据分析系统, 一个喷气引擎性能监控软件包, 一个小行星跟踪数据库,一个医疗信息数据库和一些地理信息系统. Postgres 还被许多大学用于教学用途. 最后,Illustra Information Technologies (后来并入 Informix )拿到代码并使之商业化. 在1992年末Postgres 成为 Sequoia 2000 科学计算项目的首要数据管理器. 

到了1993年, 外部用户的数量几乎翻番. 随着用户的增加. 用于源代码维护的时间日益增加占用了太多本应该用于数据库研究的时间, 于是该项目在版本4.2时正式终止.

Postgres95
在1994年,Andrew Yu 和 Jolly Chen 向 Postgres中增加了SQL语言的解释器.并随后将Postgres95源代码发布到互联网上供大家使用,成为一个开放源码的,原先伯克利Postgres代码的继承者. 
Postgres95 所有源代码都是完全的 ANSI C , 而且代码量减少了25%. 并且有许多内部修改以利于提高性能和代码的维护性.Postgres95 v1.0.x 在进行Wisconsin Benchmark 测试时大概比 v4.2快30-50%. 除了修正了一些错误,其他的一些主要改进还有: 
原来的查询语言 Postquel 被 SQL 取代(在 server 端实现).在PostgreSQL 之前还不支持子查询(但这个功能可以在 Postgres95 里面由用户定义的 SQL 函数实现)。重新实现了聚集。同时还增加了对 ``GROUP BY''的支持. C 程序仍可以调用 libpq 接口函数. 
在监控程序方面, 增加了新利用 GNUreadline 进行交互查询的监控程序(psql)。 
增加了新的前端库, libpgtcl, 用以支持以 Tcl为基础的客户端.一个样本shell,pgtclsh,提供了新的 Tcl命令用于 tcl 程序和 Postgres95 后端之间的交互. 

彻底重写了大对象的接口. 保留了将大对象转置(Inversion )作为存储大对象的唯一机制.(去掉了的转置(Inversion )文件系统。) 

去掉了记录级(instance-level )的规则系统. 但通过重写规则仍可以使用规则. 

在发布的源码中增加了一个简短的常用 SQL 和 Postgres95 特有的 SQL 特性的教程. 

用GNU make (取代了BSD make)用于制作. 同样, Postgres95 可以使用不加补丁的gcc(修正了偶数字节数据( doubles )的对齐问题).

PostgreSQL
到了1996年, 我们很明显的看出“Postgres95”这个名字已经不能经得起时间的考验了.于是我们起了一个新名字PostgreSQL 用于反映最初的 Postgres 和最新的使用 SQL的版本之间的关系. 同时版本号也重新从6.0开始, 将版本号放回到最初的由 Postgres项目开始的顺序中去. 
Postgres95 的版本的开发重点放在标明和理解现有的后端代码上. PostgreSQL 开发重点转到了一些有争议的特性和功能上了,当然各个方面的工作都在同时进行. 

PostgreSQL 主要的改进有: 

表级锁被多版本并行控制取代,这样就允许读操作在写操作活跃时连续地读取一致的数据,并且令数据库等待执行查询时用 pg_dump 进行热备份成为可能。 
许多重要的后端特性,包括子查询,缺省(值),约束和触发器都实现了. 

增加了附加的 SQL92-兼容的语言特性,包括主键,引用标识,强制的语义字符串类型转换(?literal string type coersion),类型转换,以及二进制和十六进制整数的输入. 

改进了内建的数据类型, 包括新的大范围日期/时间类型和附加几何数据类型的支持. 

总体上后端代码的速度提高了大约20-40%,而且自v6.0起后端的启动时间缩短了80%.
--------------------------------------------------------------------------------
关于这个版本
--------------------------------------------------------------------------------

PostgreSQL 可免费获得. 这个手册描述了版本 7.0 的PostgreSQL. 
我们将用 Postgres 代表发布了的 PostgreSQL. 

有关当前支持的平台, 请参阅管理员手册. 一般说来 , Postgres 可以移植到任何有完全 libc 库支持的 Unix/Posix-兼容的系统上.

--------------------------------------------------------------------------------
资源
--------------------------------------------------------------------------------

本手册由以下几部分组成: 
教程 
给新用户的介绍,不包括高级特性. 
用户手册 
  
用户需要了解的常用信息,包括可用的命令和类型. 
程序员手册 
  
  
  
  

              应用程序员需要的高级信息.包括类型和函数扩展,库接口以及应用设计方面的内容. 

管理员手册 
  
安装和管理信息,所支持的平台的列表. 
开发人员手册 
  
  

Postgres 开发者所需的信息.这部分内容是给那些有志于参与Postgres项目开发的人员看的;应用开发的信息应该包括在程序员手册内. 这部分内容包含在程序员手册中. 

参考手册 
  
  

命令语法的详细参考信息,当前包含在用户手册中.

除了上述手册外,其他的一些资源也可以帮助你安装和使用Postgres: 
手册页 
  
手册页包含常用信息和命令语法. 
FAQs 
  
常问的问题(FAQ)文档包含常见问题和平台相关问题的解答. 
READMEs 
  
一些贡献的包包含README文件. 
站点 
  
  

Postgres 网站有一些在发布版里没有的信息.在网站上有一个mhonarc邮件列表的目录,通常是解决问题的很好的地方。 

邮件列表 
  
  

 pgsql-general (归档)邮件列表是解决用户问题的好地方;同时还有其他的邮件列表,详见 PostgreSQL 网站的 Info Central 部分。 

你自己! 
  
  

Postgres 是一个开放源码的东西. 也就是说,它靠用户群体进行支持工作.当你刚开始使用Postgres 时,你将依靠其他人的帮助,或者是通过文档,或者是通过邮件列表.同时请也将你的知识贡献出来,如果你学到了一些文档里没有提到的东西,请将其写下来并贡献出来.如果你给代码增加了特性,请贡献出来. 

甚至没有很多经验的人也可以提供文档的修正和小修改,这就是好的开始.pgsql-docs(归档)邮件列表就是开始的地方.

--------------------------------------------------------------------------------
术语
--------------------------------------------------------------------------------

在下面的文档中,节点(?site) 可以理解为安装 Postgres 的机器. 由于我们可以在一台机器上安装多套 Postgres 数据库, 所以,准确地说这个词代表所安装的某一套Postgres 的二进制文件和数据库的集合. 
Postgres 超级用户 是叫 postgres 的用户,他拥有 Postgres的二进制文件和数据库文件.作为数据库超级用户,他拥有超越所有保护机制和访问任何数据的特权.另外, Postgres 超级用户可以执行一些并非所有用户可以执行的程序.要注意的是 Postgres超级用户和 Unix 超级用户 (通常叫做 root)并不相同. 出于安全的原因数据库的超级用户应该有一个非零的用户标识(UID)。 

数据库管理员 或称之为 DBA,负责安装 Postgres 和制定这个数据库的安全策略.DBA 可以用下面描述的方法增加用户和维护一套用于 createdb 的模板库。 

postmaster 是充当发往 Postgres 系统的请求的净化间的进程.前端应用与postmaster 相连,由它监控任何系统错误和与后端进程的通讯.postmaster 可由一些命令行参数来调节其特性.不过,只有你试图同时运行多套数据库或某一套非缺省的数据库时才需要设置参数. 

Postgres 的后端进程(实际上是可执行文件 postgres)可由 Postgres 超级用户直接在命令行上运行(以数据库名为参数).不过,这样做绕过了与 postmaster/节点(site)相连的共享缓冲池和锁表,因而不推荐在一个多用户节点上这么做.

--------------------------------------------------------------------------------
符号
--------------------------------------------------------------------------------

“...” 或在文件名前面的 /usr/local/pgsql/ 用于代表Postgres 超级用户的家目录. 
在命令行参数里,方括号 (“[” 和 “]”) 表示一个可选词或关键字.任何用花括号(“{” 和 “}”) 括起来的包含竖直条(“”) 的内容表示你必须选择一个. 

在例子里,圆括号 (“(” 和 “)”)用于组合布尔表达式. “” 是布尔计算符"或"(OR). 

例子将演示从不同用户和程序执行命令的结果.root用户执行的命令将由“>”开头.Postgres 超级用户执行的命令将由“%”开头,普通用户执行的命令由 “$”开头. SQL 命令视情况由“=>”开头或没有前导字符. 

注意: 当我们写这些时 (Postgres v7.0)还没有在整个文档集中通盘考虑符号标志命令(flagging commands)的使用.请向 文档邮件列表 反映问题. 

--------------------------------------------------------------------------------

问题汇报指导
当你在PostgreSQL 里碰到问题时,我们也希望听到它。你的臭虫汇报是将 PostgreSQL 做得更加可靠的一个非常重要的部分,因为即使是细致到极限的工作也不能保证在任何情况任何平台下 PostgreSQL 的每一个部分都能正常工作。 
下面的建议试图帮助你正确格式化臭虫报告,这样这些报告就能够以一种有效的方法处理。我们不强迫任何人遵循这些东西,但是这样做对我们每个人都有好处。 

我们不能保证能够正确修补每个臭虫。如果臭虫是显而易见的,很关键的或者影响许多用户,那么很有可能有些人会认真检查它们。同样也可能是我们告诉你升级到一个新版本,看看臭虫是否仍然存在。否则,我们可能会说这个臭虫在我们正计划的几个主要改写之前不会得到修补。或者这个臭虫只是太费事了,而且目前的日程表上有更重要的事情要做。如果你立即需要帮助,考虑获取一个商业性的支持。 

标识臭虫
在你发出"这是个臭虫吗?"这样的问题之前,请一再仔细地读文档,以确认你确实可以做你想做的事情。如果文档中对你能否处理你所做的事情并不清楚,也请你汇报过来;因为这个是文档的臭虫。如果发现你的程序的表现不象文档里说的那样,那就是一个臭虫。这时可能包括(不过不一定局限于)下面的现象: 
程序带着一个致命信号或者一个指向程序错误的操作系统错误信息(一个反例是一个"disk full"(磁盘满)信息,因为这样的错误必须在Postgres 外部进行修复)退出。 

程序对给出的任何输入都产生错误的输出。 

程序拒绝接收有效的输入。 

程序对非法输入没有生成任何提示或者错误信息。 

在支持的平台上根据指导未能成功地编译、制作或安装PostgreSQL。

这里的"程序"代表任何可执行文件,而不仅仅是后端服务器。 
速度慢或者资源消耗大不算是臭虫。请阅读文档或者提交邮件列表之一获取调节你的应用(的性能)的帮助。未能遵循 SQL 也不算是一个臭虫,除非显式声明了遵守该特定特性。 

在你继续准备汇报臭虫之前,请检查 TODO 列表和 FAQ,看看你报告的臭虫是否已知。如果你不能解析 TODO 列表里面的信息,请汇报你的问题。最少我们可以把 TODO 列表做得更清晰。 

汇报什么
关于汇报臭虫需要记住的最重要事就是写出所有事实并且只写事实。不要推测你认为是什么错了,什么"看起来象",或者是推测程序的哪一部分失灵了。如果你不熟悉 Postgres 的实现,你很可能猜错因而不能帮我们任何忙。而且即使你熟悉 Postgres 的实现,提炼出来的解释也只是事实的补充而不是代替。如果我们准备修理这个臭虫,我们仍然需要首先亲自看到臭虫的出现。报告简单的事实相对而言比较直接(你可以从屏幕上拷贝和粘贴),不过经常发生的是很多人认为这些事实不重要而忽略了重要的细节,否则汇报总是能够被我们理解。 
下面的条目应该包含在所有臭虫汇报里面: 

从程序启动开始到重现问题的准确步骤顺序。这应该自包含;要知道如果输出将依赖于表中的数据时,光把一个光秃秃的 select 语句发过来而不吧前面的创建表和插入语句发过来是不够的。我们没有时间分析你的数据库结构,而且如果我们试着建立我们自己的数据,那我们就有可能错过问题。测试与查询语言有关的问题的最好的格式是一个可以通过 psql 前端运行并显示问题的文件。(确保在你的 ~/.psqlrc 启动文件里面没有任何东西。)我们鼓励你最小化你的例子,但这不是非做不可的事情。如果臭虫是可以复现的,那么两种方式都能帮助我们找到它。 

如果你的应用使用其他客户端接口,比如说 PHP,那么请设法隔离出有毛病的查询。我们可能不会设置一个 web 服务器来复现你的问题。不管怎么说,请记住提供准确的输入文件,而不要猜测问题会在"大文件"或者"中等尺寸的数据库"等等的身上发生。因为这样的信息太不确切,因而没有什么用处。 

你得到的输出。请不要说它"不起作用"或者"失灵了"。如果有错误信息,请写明,即使你不能理解也一样。如果程序带着操作系统错误退出,也请写清楚。如果什么也没有发生,就照直说。即使你的测试实例是程序崩溃或者其他显而易见的现象,它也有可能不会在我们的平台上发生。如果可能,最简单的事情是从终端拷贝输出。 

注意:如果是致命错误,客户端提供的信息可能不会包含所有能得到的信息。这种情况下,还要看看数据库服务器的输出。如果你没有保留你的服务器输出,那么现在是做这件事的好机会。
还有一样很重要去声明的是你期望的输出。如果你只是写到"这条命令给我这样的输出。"或者"这不是我期望的。",我们可能自己运行它,检查输出,然后认为看上去很好并且正是我们所期望的输出。我们不应该把时间花在解析你的命令的语义上。特别是要避免仅仅说"这不是 SQL 说的/Oracle 做的那样。" 从 SQL 里挖掘出正确的特性可不是好玩的事情,我们也不能知道所有其他的关系数据库的特性是怎样的。(如果你的问题是程序崩溃,你显然可以忽略这个条目。) 
任何命令行选项和其他启动选项,包括相关的环境变量或者你从缺省值修改以后的配置文件。同时,还要准确。如果你使用启动系统时自动启动数据库服务器的预打包的版本,你应该试着找出这些是怎样实现的。 

任何你做得与安装指导不一样的东西。 

PostgreSQL 版本。你可以运行命令 SELECT version();来检查你正在运行的版本是什么。如果这个函数不存在,请说明,这样我们就知道你的版本有够老。如果你无法启动服务器或者客户端,参阅源码目录里面的 README 文件或者看看你的发布文件的名称或包名称。如果你的版本早于 7.0,我们几乎可能会告诉你去升级。每个新版本都会有成吨的臭虫被修理掉,这也是我们写(新版本)的原因。 

如果你运行预打包的版本,例如 RPM,请说明,包括那个包可能有的任何子版本号。如果你说的是 CVS 快照,说明之,包括它的日期和时间。 

平台信息。这包括内核名称和版本,C 库,处理器,存储器信息。大多数情况下只需要汇报供应商和版本,但是不要指望每个人都很清楚 "Debian" 包括什么东西或者说每个人都运行在 Pentium 上。如果你还有关于编译器,make等安装的问题信息,也有必要详细汇报。

不要怕你的臭虫汇报变得很长。这就是生活。一开始就汇报所有的事情要比让我们从你那里挤出事实要好。另外,如果你的输入文件非常巨大,先问问有没有人有兴趣查看它也是合理的。 
不要把你的时间花在寻找如何通过修改输入来消除问题的方法上。这样很有可能不能对解决问题有任何帮助。如果发现不能直接修理臭虫,你还有时间来查找和共享你的绕过方法。还有,我们再说一便,不要在猜测臭虫的位置上面浪费时间。我们能够及时找到错误。 

当你书写臭虫汇报时,请选用不易混淆的术语。软件包本身被称为"PostgreSQL",有时称为 "Postgres"。(有些时候用缩写 "Pgsql",但是请不要这么使用。)当你特指后端服务器时,请明确说明,而不要仅仅是说 "Postgres 崩溃了"。交互前端(SQL 界面)叫做 "psql" 而且在所有用法和用途上都是和后端完全分离的。 

到哪里汇报臭虫
通常,把汇报发到臭虫汇报邮件列表。我们建议你为你的电子邮件消息选用一个描述性的题目,也许就用错误信息的一部分。 
不要把臭虫汇报发送到任何用户邮件列表里,例如 SQL 语言邮件列表 或 通用话题邮件列表。这些邮件列表用于回答用户问题,而且那些订阅者通常不希望接收臭虫汇报。更重要的是,他们很可能不会修理这些臭虫。 

还有,请不要向 开发者邮件列表 发送臭虫汇报。这个列表用于讨论 PostgreSQL 的开发,因而我们很希望能和臭虫汇报分离开。如果修理这个臭虫需要更多评论,我们可能会在这个列表开一个关于你的臭虫的讨论会。 

如果你觉得文档有问题,请发电子邮件到 文档邮件列表。在你的问题汇报里面指明文档、章、节。 

如果你的臭虫是一个在不支持平台上的移植性问题,向 移植性问题邮件列表 发送电子邮件,这样我们(还有你)可以一起尝试把 PostgreSQL 移植到你的平台上。 

注意:由于我们不愿意看到的各种各样的垃圾邮件,上面的所有电子邮件地址都是封闭的邮件地址。也就是说,你需要先申请,然后才能发帖子。如果你只是想发送邮件而不想接受列表的往来的邮件,你可以提交特殊的 pgsql-loophole 邮件列表,那里允许你向所有 PostgreSQL 邮件列表发信而接收不到任何信息。向 pgsql-loophole-request@postgresql.org 发邮件来申请。 
(译注:这里用"assume"这个词真多,让我想起一个老外给我讲解"assume"的意思:"ass-u-me" :-D)


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Y2K 声明
作者:Thomas Lockhart 于 1998-10-22。 更新于 2000-03-31。
PostgreSQL 全球开发队伍将提供 Postgres 软件的代码树作为一种公众服务,对其特性和性能不做任何保证和承诺,但是,到我们写这些为止: 
这些声明的作者,作为一个从1996年11月开始从事Postgres支持的志愿者,并未发现任何 Postgres 的代码与2000年1月1日的时间切换(Y2K)相关. 
本声明的作者并未收到当前或最近版本的Postgres 任何与 Y2K 问题相关的报告,不论是在做递归测试还是在其他领域的使用中.考虑到我们的装机量和我们的邮件列表的活跃性,如果问题存在,我们应该可以获得消息. 
据作者所知,Postgres 对两位数年份的一些假设的文档在 用户手册 中的日期类型章节中。就两位数年份而言, 关键的切换年份是1970年,而不是2000年;比如"70-01-01"被看作是 1970-01-01, 而"69-01-01"将被看作是 2069-01-01。 
任何因OS取 "当前时间" 造成的Y2K问题都可能传染到Postgres. 
请参考 Gnu 工程 和 Perl 大学 进一步讨论Y2K问题,尤其是开放源码(免费)软件. 

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

版权和商标
(译注:具体的版权译文请参阅 FAQ。)
PostgreSQL is Copyright (C) 1996-2000 by PostgreSQL Inc. and is distributed under the terms of the Berkeley license. 

Postgres95 is Copyright (C) 1994-5 by the Regents of the University of California. Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. 

In no event shall the University of California be liable to any party for direct, indirect, special, incidental, or consequential damages, including lost profits, arising out of the use of this software and its documentation, even if the University of California has been advised of the possibility of such damage. 

The University of California specifically disclaims any warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The software provided hereunder is on an "as-is" basis, and the University of California has no obligations to provide maintainance, support, updates, enhancements, or modifications. 

All trademarks are the property of their respective owners. 



--------------------------------------------------------------------------------

Tags:

作者:佚名
分享到: 微信 更多