From 969320c8b8b9d455d07fc0309cf7755d8fcf9b7c Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 1 Feb 2007 04:55:53 +0000 Subject: [PATCH] Chinese FAQ update Daojing.Zhou --- doc/FAQ_chinese | 1173 +++++++++++---------- doc/src/FAQ/FAQ_chinese.html | 1881 ++++++++++++++++++---------------- 2 files changed, 1627 insertions(+), 1427 deletions(-) diff --git a/doc/FAQ_chinese b/doc/FAQ_chinese index 9e0dd9b33f..43d4664759 100644 --- a/doc/FAQ_chinese +++ b/doc/FAQ_chinese @@ -1,725 +1,794 @@ - PostgreSQL 常见问题(FAQ) + PostgreSQL 甯歌ч糉AQ锛 - 最近更新:2005 年 06 月 02 日 星期五 22:27:35 CST + 骅挎存帮2007 骞 1 5 妤 骀浜 15:40:20 EST + 涓骁骅挎存帮2007 骞 1 29 妤 骀涓 22:48:04 CST - 目前维护人员:Bruce Momjian (pgman@candle.pha.pa.us) - 中文版维护人员:doudou586 (doudou586_2005@yahoo.com.cn) + 绠彗淮妞浜哄锛Bruce Momjian (pgman@candle.pha.pa.us) + 涓骁缁存や汉屣糄aojing.Zhou锛doudou586@gmail.com锛 - 本文档的最新版本可以在 - http://www.postgresql.org/files/documentation/faqs/FAQ.html查看。 + 娆骀。珂姘珂互濞 + http://www.postgresql.org/files/documentation/faqs/FAQ.html妤玢 - 与操作系统平台相关的问题在http://www.postgresql.org/docs/faq/里回答。 + 涓驿界郴缁骞冲扮稿崇楫棰瀵濞http://www.postgresql.org/docs/faq/殒惧扮 + 妗 _________________________________________________________________ -常见问题 +甯歌ч - 1.1)PostgreSQL 是什么?该怎么发音? - 1.2)PostgreSQL 的版权是什么? - 1.3)PostgreSQL 可以运行在哪些操作系统平台上? - 1.4)我从哪里能得到 PostgreSQL? - 1.5)我从哪里能得到对 PostgreSQL 的支持? - 1.6)我如何提交一个BUG报告? - 1.7)最新版的PostgreSQL 是什么? - 1.8)能够获取的最新文档有哪些? - 1.9)我如何了解已知的 BUG 或暂缺的功能? - 1.10)我应该怎样学习 SQL ? - 1.11)我应该怎样加入开发队伍? - 1.12)PostgreSQL 和其他数据库系统比起来如何? - 1.13)丝刂坪凸芾鞵ostgreSQL ? + 1.1)PostgreSQL 姣浠涔锛璇ユ涔彘筹 + 1.2)璋妲宥彗鏟ostgreSQL 锛 + 1.3)PostgreSQL珑骀讳癸 + 1.4)PostgreSQL瀵浠ヨ胯″ㄥ烘浣绯荤诲钩灏涓锛 + 1.5)驿诲杞寰灏PostgreSQL锛 + 1.6)骀扮鏟ostgreSQL 姣浠涔锛 + 1.7)驿诲杞寰灏瀵筆ostgreSQL 珂锛 + 1.8)驽︿芥浜や镐釜BUG妤屣 + 1.9)驽︿戒鸿В宸茬ョ BUG 骀缂虹彖斤 + 1.10)杞澶璺彗骀版妗f濯浜锛 + 1.11)驽鸿骀 峰︿ SQL 锛 + 1.12)濡浣驿氦琛ヤ告姣 濂寮彘浼锛 + 1.13)PostgreSQL 邋朵绘版虹郴缁姣璧锋ュ︿斤 -用户客户端问题 +绋娣瀹㈡风楫棰 - 2.1)我们可以用什么语言和 PostgreSQL 打交道? - 2.2)有什么工具可以把 PostgreSQL 用于 Web 页面? - 2.3)PostgreSQL 拥有图形用户界面吗? + 2.1)驿滑瀵浠ョㄤ讳硅ㄥPostgreSQL 驿氦轱 + 2.2)驿讳瑰伐宸瀵浠ユPostgreSQL 绋浜 Web 椤甸 + 2.3)PostgreSQL 妤驽惧舰绋娣玳㈠锛 -系统管理问题 +绯荤荤玳 - 3.1)我怎样才能把 PostgreSQL 装在 /usr/local/pgsql 以外的地方? - 3.2)我如何控制来自其他主机的连接? - 3.3)我怎样调整数据库引擎以获得更好的性能? - 3.4)PostgreSQL 里可以获得什么样的调试特性? - 3.5)为什么在试图连接登录时收到“Sorry, too many clients” 消息? - 3.6)为什么要在升级 PostgreSQL 主要发布版本时做 dump 和 restore ? - 3.7)(使用PostgreSQL)我需要使用什么计算机硬件 ? + 3.1)骀 锋杞鍼ostgreSQL 瑁濞 /usr/local/pgsql 浠ュょ灏婀锛 + 3.2)驽︿芥у舵ヨ朵荤佃玷挎ワ + 3.3)骀 疯版存版烘濉濞浠ヨ峰炬村ソ珂ц斤 + 3.4)PostgreSQL 殄互璺寰浠涔 风璋璇绻妲锛 + 3.5)涓轰讳瑰ㄨ捐挎ョ诲芥舵跺扳Sorry, too many clients 娑姣锛 + 3.6)PostgreSQL珏绾ц跨ㄦ濯浜邋锛 + 3.7)(浣跨≒ostgreSQL)骈瑕浣跨ㄤ讳硅绠婧纭欢 锛 -操作问题 +驿介 - 4.1)如何只选择一个查询结果的头几行?或是随机的一行? - 4.2)如何查看表、索引、数据库以及用户的定义?如何查看psql里用到的查询指 - 令并显示它们? - 4.3)如何更改一个字段的数据类型? - 4.4)一行记录,一个表,一个库的最大尺寸是多少? - 4.5)存储一个典型的文本文件里的数据需要多少磁盘空间? - 4.6)为什么我的查询很慢?为什么这些查询没有利用索引? - 4.7)我如何才能看到查询优化器是怎样评估处理我的查询的? - 4.8)我怎样做正则表达式搜索和大小写无关的正则表达式查找?怎样利用索引进 - 行大小写无关查找? - 4.9)在一个查询里,我怎样检测一个字段是否为 - NULL?我如何才能准确排序而不论某字段是否含NULL值? - 4.10)各种字符类型之间有什么不同? - 4.11.1)我怎样创建一个序列号/自动递增的字段? - 4.11.2)我如何获得一个插入的序列号的值? - 4.11.3)使用 currval() 会导致和其他用户的紊乱情况(race condition)吗? - 4.11.4)为什么不在事务异常中止后重用序列号呢?为什么在序列号字段的取值 - 写嬖诩涠夏兀 - 4.12)什么是 OID?什么是 CTID ? - 4.13)为什么我收到错误信息“ERROR: Memory exhausted in - AllocSetAlloc()”? - 4.14)我如何才能知道所运行的 PostgreSQL 的版本? - 4.15)我如何创建一个缺省值是当前时间的字段? - 4.16)如何进行 outer join (外连接)? - 4.17)如何使用涉及多个数据库的查询? - 4.18)如何让函数返回多行或多列? - 4.19)为什么我在使用PL/PgSQL函数存取临时表时会收到错误信息“relation - with OID ##### does not exist”? - 4.20)目前有哪些数据复制方案可用? + 4.1) 濡浣濯殒╀镐釜妤璇㈢绘珏ご 琛锛骀婧玟歌★ + 4.2) + 濡浣妤玷〃沌储寮沔版轰互彗ㄦ风瀹涔锛濡浣妤鏿sql殓ㄥ扮妤璇㈡浠ゅ苟婢 + ず瀹浠 + 4.3) 濡浣娲婀涓涓娈电姘娈绫诲锛 + 4.4) 彐¤褰锛邃釜琛间镐釜姘娈搴珂澶ч宥姣澶灏锛 + 4.5) 邋ㄤ镐釜甯彗骀浠堕珂版瑕澶灏纾珑┖榇锛 + 4.6) 涓轰讳规珂ヨ寰姊锛涓轰讳硅夸烘ヨ娌℃濠绋绱㈠硷 + 4.7) 驽︿芥杞珏版ヨ浼邋ㄦ 疯及澶珂珂ヨ顼 + 4.8) 骀 峰妫彖〃杈惧兼绱㈠澶у板 宄珂 + e琛ㄨ揪寮妤婢锛骀 峰╃ㄧ储寮杩琛澶у板 宄妤婢锛 + 4.9) 濞涓涓ヨ轱兼骀 锋f典镐釜彐姣濡涓 + NULL锛驽︿芥杞彗‘驽鸿涓璁烘彐姣濡瀚NULL寮锛 + 4.10) 彗у绗︾被邃归存浠涔涓屣 + 4.11.1) 骀 峰寤轰镐釜搴邋峰骀ㄩ澧珏娈碉 + 4.11.2) 驽︿借峰句镐釜驽ョ搴邋风寮锛 + 4.11.3) 彐朵娇绋 currval() 浼瀵艰村宥浠绋娣珏茬宓屣 + 4.11.4) 涓轰讳逛稿ㄤ哄″煎父涓姊彘绋搴邋峰间负浠涔濞搴邋峰娈电邋间腑 + 邋ㄩ存澧锛 + 4.12) 浠涔姣 OID锛浠涔姣 CTID 锛 + 4.13) 涓轰讳规娑灏殍淇℃ERROR: Memory exhausted in + AllocSetAlloc()怙 + 4.14) 驽︿芥杞绁殒杩琛 PostgreSQL 珑娆锛 + 4.15) 驽︿藉寤轰镐釜缂虹寮姣褰彐堕寸彐锛 + 4.16) 濡浣妲琛澶杩妤锛outer join锛妤璇 + 4.17) 濡浣妲琛娑邋や釜姘娈搴珂ヨ锛 + 4.18) 濡浣璁╁芥拌垮澶琛驽ゅ姘娈锛 + 4.19) 涓轰讳规濞浣跨≒L/PgSQL褰姘邋涓存惰〃娑浼娑灏殍淇℃relation + with OID ##### does not exist怙 + 4.20) 绠彐濯浜姘娈澶宥婀妗瀵绋锛 + 4.21) 涓轰芥ヨ缁骀剧ず玷〃彐邋涓骁妤璇㈣ヤ腑 + 玟稿锛涓轰藉ぇ彗舵涓杞淇顼 _________________________________________________________________ -常见问题 +甯歌ч - 1.1)PostgreSQL 是什么?该怎么发音? - - PostgreSQL 读作 Post-Gres-Q-L,有时候也简称为Postgres 。 + 1.1)PostgreSQL 姣浠涔锛璇ユ涔彘筹 + + PostgreSQL 璇讳 Post-Gres-Q-L锛骀跺涔绠绉颁负Postgres + 沔冲镐稿跺槌玟汉邋昏块涓杞藉0槌驿欢锛 MP3 煎 PostgreSQL - 是面向目标的关系数据库系统,它具有传统商业数据库系统的所有功能,同时又 - 含有将在下一代 DBMS 系统的使用的增强特性。 PostgreSQL - 是自由免费的,并且所有源代码都可以获得。 + 姣棰彗 珏崇郴姘娈搴绯荤伙煎锋浼 缁邃告版虹郴缁珂驽杞锛彐跺瀚驽板 + ㄤ镐镐唬 DBMS 绯荤荤浣跨ㄧ澧寮虹规сPostgreSQL + 姣瑾绫彖垂顼煎苟涓骀婧浠g 榻瀵浠ヨ峰俱 PostgreSQL - 的开发队伍主要为志愿者,他们遍布世界各地并通过互联网进行联系,这是一个 - 社区开发项目,它不被任何公司控制。 - 如想加入开发队伍,请参见开发人员常见问题(FAQ) + 珏煎殇间富瑕涓哄挎胯锛浠浠甯涓珏灏骞堕杩浜桤借胯¤绯伙艰挎镐釜绀惧 + 哄煎椤圭煎歌浠讳藉告у躲 + 濡娉 濂寮彘浼锛璇峰瑙寮邃汉邋父瑙楫棰锛FAQ锛 http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - 1.2)PostgreSQL 的版权是什么? - - PostgreSQL的发布遵从经 - 典的BSD版权。关于源代码的如何使用没有任何限制,我们很喜欢这种方式并且 - 姑挥写蛩愀谋渌 + 1.2) 璋妲宥PostgreSQL 锛 + + 濡驿 濞瀵绘綪ostgreSQL珂楱浜猴兼姣浠涔涓 + 澶у浼锛骀讳规灞瀣甯锛浣 濯杞婢寮浜--- 涓轰镐釜涔涓瀛 + 濞锛浣驿滑珑‘驿镐釜 + 稿垮у浼錍VS绠$缁锛浣杩浜宸ヤ界荤璁剧富瑕姣涓轰鸿胯$珏伐浣桎告 + PostgreSQL杩琛绗 寮妲宥锛PostgreSQL椤圭变换浣浜哄 + 瀵邋 珏煎浜哄绀惧哄骀绋娣妲宥顼间 骈瑕彗灏辨殚欢彖〃锛邃歌璁 + 宄瀵锛瑕邃窹ostgreSQL珏煎璇﹁ 寮邃汉邋父楫棰 (Developer's FAQ) + 璺邃俊姣锛 - 下面就是我们使用的BSD版权内容: + 1.3)PostgreSQL珑骀讳? + + PostgreSQL珏甯榈浠缁甯鏐SD珂沐璁哥ㄦ蜂搁绠珏颁娇绋PostgreSQL锛玷充 + 瀵浠ラ瀹PostgreSQL桎稿轰唬 涔瀵浠ワ煎哥殄跺氨姣浣 涓杞 杞欢瑾 + 韩楫棰桢驿滑杩借冲捐矗浠伙煎﹀ゅ氨姣瑕姹骀玷蒋浠舵疯翠腑 + 椤诲娆浠ヤ哥驽0驺涓棰灏辨浠浣跨ㄧBSD珂澹版邋锛 - 部分版权(c)1996-2005,PostgreSQL - 全球开发小组,部分版权(c)1994-1996 加州大学妒 + PostgreSQL姘娈搴绠$绯荤 - (Portions copyright (c) 1996-2005, PostgreSQL Global Development - Group Portions Copyright (c) 1994-6 Regents of the University of - California) + 楱彗骘糲锛1996-2005锛PostgreSQL 濞珏煎灏缁锛楱彗骘糲锛1994-1996 + 宸澶у﹁d - 允许为任何目的使用,拷贝,修改和分发这个软件和它的文档而不收取任何费用 - , - 并且无须签署因此而产生的证明,前提是上面的版权声明和本段以及下面两段文 - 字出现在所有拷贝中。 + 锛Portions copyright (c) 1996-2005,PostgreSQL Global Development Group + Portions Copyright (c) 1994-6 Regents of the University of + California锛 - (Permission to use, copy, modify, and distribute this software and + 彖涓轰换浣绠玟娇绋锛娣璐锛淇瑰邋杩涓蒋浠跺瀹珂妗h涓娑邃换浣璐圭 +  骞朵告 椤荤剧讲 姝 + よ浜х玷锛彐姣涓棰珑驽0驽娆娈典互邃搁袱娈垫邋虹板ㄦ骀疯翠搞 + + 锛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.) + copies.锛 - 在任何情况下,加州大学都不承担因使用此软件及其文档而导致的对任何当事人 - 的直接的, - 间接的,特殊的,附加的或者相伴而生的损坏,包括利益损失的责任,即使加州 - 大学已窘ㄒ榱苏庑┧鹗У目赡苄允币彩侨绱恕 + 濞浠讳芥宓涓锛 宸澶у﹂戒告挎 浣跨ㄦ + よ蒋浠跺宥骀。桢璐珏浠讳藉戒轰汉珑存ョ锛 + 榇妤顼肩规锛殄 珂桤镐即桤珂屣煎娆濠珂澶辩璐d换锛宄浣垮 宸澶у + ﹀凡缁寤鸿浜杩浜驽け珏芥ф朵规︽ゃ - (IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + 锛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.) + HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.锛 - 加州大学明确放弃任何保证,包括但不局限于某一特定用途的商业和利益的隐含 - 保证。 - 这里提供的这份软件是基于“当作是”的基础的,因而加州大学没有责任提供维 - 护,支持,更新,增强或者修改的服务。 + 宸澶у︽纭惧间换浣淇璇锛彐戒稿遍浜驿哥瑰ㄩ珏涓邋╃玳瀚淇璇 + 杩殒渚玷夸唤杞欢姣搴浜忮戒芥珏虹$锛 桢 宸澶у + ︽病骅矗浠绘渚缁存わ兼锛娲姘锛澧寮烘桎慨婀珂濉 - (THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + 锛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 MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS.) + UPDATES, ENHANCEMENTS, OR MODIFICATIONS.锛 - 1.3)PostgreSQL 可以运行在哪些操作系统平台上? - - 一般说来,一个现代的 UNIX 兼容的平台都能运行 PostgreSQL - 。在安装指南里列出了发布时竟魅凡馐缘钠教ā + 1.4)PostgreSQL 瀵浠ヨ胯″ㄥ烘浣绯荤诲钩灏涓锛 + + 涓璎璇存ワ间换浣绨濞瀵 UNIX 寮瀹圭驿界郴缁涔涓榻杞杩琛PostgreSQL + 沐ㄥf彘邋轰哄甯娑缁杩骁‘娴璇珏钩灏 - PostgreSQl也可以直接运行在基于微软Windows-NT的操作系统,如Win2000,Win - XP 和 Win2003,已制作完成的安装包可从 - http://pgfoundry.org/projects/pginstaller下载,基于MSDOS的Windows操作 - 低 (Win95,Win98,WinMe)需要通过Cygwin模拟环境运行PostgreSQL。 + PostgreSQl涔瀵浠ョ存ヨ胯″ㄥ轰哄井杞疻indows-NT珂浣绯荤伙煎in2000 + SP4锛WinXP Win2003锛宸插朵藉珏e瀵浠 + http://pgfoundry.org/projects/pginstaller涓杞斤煎轰篗SDOS鏦indows驿界 + 荤 锛Win95锛Win98锛WinMe锛殍﹂杩Cygwin妯℃绡澧杩琛PostgreSQL - 同时也有一个为Novell Netware 6开发的版本可从 http://forge.novell.com - 获取,为OS/2开发的版本可从 + 彐朵规涓涓负Novell Netware 6寮彗珂 + http://forge.novell.com璺屣间负OS/2(eComStation)寮彗珂 http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F + SQL&stype=all&sort=type&dir=%2F 涓杞姐 - 1.4)我从哪里能得到 PostgreSQL? - - 通过浏览器可从http://www.postgresql.org/ftp/下载,也可通过FTP,从 - ftp://ftp.PostgreSQL.org/pub/站点下载。 + 1.5) 驿诲杞寰灏PostgreSQL锛 + + 殍挎佃уㄥ籬ttp://www.postgresql.org/ftp/涓杞斤间瑰杩FTP锛浠 + ftp://ftp.PostgreSQL.org/pub/绔绻涓杞姐 - 1.5)我从哪里能得到对 PostgreSQL 的支持? - - PostgreSQL社区通过邮件列表为其大多数用户提供帮助,加入邮件列表的主站点 - 是 - http://www.postgresql.org/community/lists/,一般情况下,先加入General - 或 Bug邮件列表是一个较好的开始。 + 1.6) 骀扮鏟ostgreSQL姣浠涔锛 + + PostgreSQL 骀扮珂娆 8.2.1 - 主要的IRC频道是在FreeNode(irc.freenode.net)的#postgresql,为了连上此频 - 道,可以使用UNIX程序irc,其指令格式: irc -c '#postgresql' "$USER" - irc.freenode.net - ,或者使用其他IRC客户端程序。在此网络中还存在一个PostgreSQL的西班牙频 - (#postgersql-es)和法语频道 - (#postgresql-fr)。同样地,在EFNET上也有一个PostgreSQL的交流频道。 + 驿滑璁″姣骞村甯涓涓富瑕彗骇珂兼 涓邋镐镐釜灏珂 - 商业支持公司的列表在 http://techdocs.postgresql.org/companies.php。 + 1.7) 驿诲杞寰灏瀵筆ostgreSQL珂锛 + + PostgreSQL绀惧洪杩楫浠跺琛ㄤ负宥澶уゆ扮ㄦ锋渚甯╋艰殚欢彖〃玟富 + 绔绻姣 + http://www.postgresql.org/community/lists/锛涓璎驽典革煎 濂General + Bug楫浠跺琛ㄦ镐釜杈濂界寮濮 - 1.6)我如何提交一个BUG报告? - - 可访问 - http://www.postgresql.org/support/submitbug,填写Bug上报表格即可。 + 涓昏︾IRC棰殒‵reeNode(irc.freenode.net)#postgresql锛涓轰鸿夸告 + ら㈤锛瀵浠ヤ娇绋UNIX绋搴irc锛宥驿护 煎硷 irc -c '#postgresql' + "$USER" irc.freenode.net 锛骅浣跨ㄥ朵籌RC瀹㈡风绋搴沐ㄦょ界讳歌垮 + 濞涓涓狿ostgreSQL玷タ珑棰(#postgersql-es)彐宠㈤ + (#postgresql-fr)沐 峰帮煎‥FNET涓涔驿镐釜PostgreSQL玟氦娴棰殂 - 同样也可访问ftp站点ftp://ftp.PostgreSQL.org/pub/ - 检查有无更新的PostgreSQL版本或补丁。 + 瀵驿惧涓姣骁瀣甯彖〃瀵濞http://techdocs.postgresql.org/companies.php娴 + 瑙 - 1.7)最新版的PostgreSQL 是什么? - - PostgreSQL 最新的版本是版本 8.0.2 (译注:现最新版本为8.0.3)。 + 1.8) 驽︿芥浜や镐釜BUG妤屣 + + 瀵璁块 + http://www.postgresql.org/support/submitbug锛濉Bug涓妤琛ㄦ 煎冲煎 + 蜂瑰楫ftp绔绻ftp://ftp.PostgreSQL.org/pub/ + 妫妤骀 娲姘鏟ostgreSQL珂琛ヤ搞 - 我们计划每年发布一个主要版本,每几个月发布一个小版本。 + 殍夸娇绋Bug驿氦琛ㄦ 兼姣邋綪ostgreSQL楫浠跺琛ㄧBug殄父浼驿互涓涔涓邋わ + + * 骀浜ゅ瀹逛告镐釜Bug邋朵告疊ug珏 + * 骀浜ゅ瀹规镐釜宸茬ョBug骞朵稿凡缁 濂TODO寰澶玟换濉彖〃 + * 骀浜ょBug宸插ㄥ藉珂歌淇c + * 骀浜ょBug宸蹭慨妫浣灏妾灏琛ヤ稿 濂绨濞珏甯杞欢邈 + * 璇锋辨浜よ驿炬磋缁玟俊姣锛 + + 驿界郴缁 + + PostgreSQL珂 + + 瀵殓癇ug珂佃′ + + 璋璇淇℃ + + 璋璇璺韪惧 + * 骀浜ゅ瀹规镐釜姘Bug锛灏妲琛浠ヤ稿伐浣锛 + + 邋缓涓涓拌ˉ涓骞跺板跺 濂涓涓涓富瑕珂姣灏珂硅跨娆涓 + + 妞Bug骀朵歌戒慨妫锛灏琚 璩TODO寰澶玟换濉彖〃 + + 1.9) 驽︿戒鸿В宸茬ョ BUG 骀缂虹彖斤 + + PostgreSQL 姣驿镐釜姗灞 SQL:2003 珏殂彘驿滑鏣ODO + 彖〃锛浜瑙e凡绁Bug彖〃沔缂虹彖藉灏妤珏煎璁″ - 1.8)能够获取的最新文档有哪些? - - PostgreSQL包含大量的文档,主要有一些手册,手册页和一些的测试例子。参见 - /doc 目录(译注:应为 $PGHOME/doc)。 你还可以在线浏览 PostgreSQL - 的手册,其地址是:http://www.PostgreSQL.org/docs。 + 瑕姹澧 姘彖界绯璇烽甯镐兼跺颁互涓涔涓珏澶锛 + * 璇ュ杞宸插 濂TODO寰澶玟换濉彖〃 + * 璇ュ杞涓姣蹇椤荤锛 涓猴 + + 瀹姣绨骁涓绗﹀SQL 彗驽杞玳澶 + + 璇ュ杞妲浼澶уぇ澧 浠g 珏ゆ绋搴锛桢甫妤珏ソ澶姣寰歌冻殓 + + 璇ュ杞姣涓瀹濞骀稿 玢 + * 璇ュ杞灏琚 濂TODO寰澶玟换濉彖〃 + + PostgreSQL涓浣跨˙ug璺韪郴缁锛 涓烘浠绨濞楫浠跺琛ㄤ腑 + 绱妤邋や互邃胯疶ODO浠诲″琛ㄦ绘や烘姘缍骁婀寮宸ヤ芥玟兼撮镐恒浜瀹 + 革糂ug涓浼濞驿滑玷蒋浠朵稿濞寰榭娑榇锛 + 瀵瑰奖邋惧ょㄦ风Bug涔婊姣寰蹇艰淇c瀵涓杞婢灏骀婀杩沔楂邃慨姝 + g灏婀姣CVS珂ュ夸俊姣锛宄浣挎ㄨ蒋浠舵扮娆珏甯淇℃腑 + 涔涓浼邋烘稿ょ杞欢娲姘 - 有两本关于 PostgreSQL 的书在线提供,在 - http://www.PostgreSQL.org/docs/awbook.html 和 - http://www.commandprompt.com/ppbook/ 。 - 也有大量的PostgreSQL书籍可供购买,其中最为流行的一本是由Korry - Douglas编写的。在 - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php上 - 上有大量有关PostgreSQL书籍的简介。 在 - http://techdocs.PostgreSQL.org/上收集了有关 PostgreSQL - 的大量技术文章。 + 1.10) 杞澶璺彗骀版妗f濯浜锛 + + PostgreSQL邋ぇ殓骀。锛涓昏︽璇︾荤彖驽锛驽椤靛涓浜珂佃惧沐瑙 /doc + 绠褰锛璇娉煎轰负 $PGHOME/doc锛 + 浣 杩瀵浠ュㄧ嚎娴瑙PostgreSQL珂屣煎剁藉姣锛http://www.PostgreSQL.org/d + ocs - 客户端的命令行程序psql有一些以 \d - 开头的命令,可显示关于类型,操作符,函数,汇总等的信息,使用 \? - 可以显示所有可用的命令。 + 驿袱娆宄浜PostgreSQL玟功濞绾挎渚锛濞 + http://www.PostgreSQL.org/docs/awbook.html + http://www.commandprompt.com/ppbook/ 涔驽ぇ殓PostgreSQL涔︾卞捐喘 + 涔帮煎朵告涓烘佃$涓娆姣绫Korry Douglas缂彗沐 + http://techdocs.PostgreSQL.org/techdocs/bookreviews.php涓 + 涓驽ぇ殒宄PostgreSQL涔︾辩绠浠 濞 + http://techdocs.PostgreSQL.org/涓娑殇烘宄PostgreSQL珏ぇ殒姣骁 - 我们的 web 站点包含更多的文档。 + 瀹㈡风珏戒护琛绋搴psql驿镐轰互 \d + 寮澶寸褰浠わ煎剧ず宄浜绫诲锛驿界锛褰姘锛桢玟俊姣锛浣跨 \? + 瀵浠ユ剧ず骀瀵绋珏戒护 - 1.9)我如何了解已知的 BUG 或暂缺的功能? - - PostgreSQL 支持一个扩展了的 SQL-92 的子集。参阅我们的TODO - 列表,获取一个已知Bug,暂缺的功能和将来的计划。 + 驿滑 web 绔绻邋村ょ骀。 - 1.10)我应该怎样学习 SQL ? - - 首先考虑上述提到的与PostgreSQL相关的书籍,另外一本是Teach Yourself SQL - in 21 Days, Second Edition, 我们的许多用户喜欢The Practical SQL - Handbook Bowman, Judith S., et al., Addison-Wesley,其他的则喜欢 The - Complete Reference SQL, Groff et al., McGraw-Hill。 + 1.11) 驽鸿骀 峰︿ SQL 锛 + + 棣彖桎歌堪驽扮涓PostgreSQL绺宄玟功绫锛濡澶涓娆姣Teach Yourself SQL in + 21 Days, Second Edition锛宥璇︾讳荤荤缃彐 + http://members.tripod.com/er4ebus/sql/index.htm锛 + 驿滑玷澶绋娣彐The Practical SQL Handbook锛 Bowman, Judith S. + 缂屣糀ddison-Wesley瀣甯搴顼煎朵荤邋娆 The Complete Reference SQL, + Groff 缂屣糓cGraw-Hill瀣甯搴玢 - 1.11)我应该怎样加入开发队伍? - - 详见 Developer's FAQ 。 + 濞涓彗藉涓涔驽惧ソ珂绋锛浠浠 + * http://www.intermedia.net/support/sql/sqltut.shtm + * http://sqlcourse.com. + * http://www.w3schools.com/sql/default.asp + * http://mysite.verizon.net/Graeme_Birchall/id1.html + + 1.12)濡浣驿氦琛ヤ告姣 濂寮彘浼锛 + + 璇﹁ 寮邃汉邋父瑙楫棰 (Developer's FAQ) - 1.12)PostgreSQL 和其他数据库系统比起来如何? - - 评价软件有好几种方法:特性,性能,可靠性,支持和价格。 + 1.13)PostgreSQL邋朵绘版虹郴缁姣璧锋ュ︿斤 + + 璇浠疯蒋浠舵濂藉 绉婀娉锛彖斤兼ц斤煎 妲锛姣驽浠锋 笺 - 特性 - PostgreSQL 拥有大型商用 DBMS 里大多数特性, - 例如:事务,子查询,触发器,视图,外键参考完整性和复杂的锁等。 - 我们还有一些它们没有的特性,如用户定义类型,继承,规则和多版本 - ⑿锌刂埔约跎偎恼玫取 + 彖 + PostgreSQL 妤驽ぇ邋绋姘娈搴驽ょ彖斤间惧︼间哄★煎 + 妤璇艰Е邋艰у撅煎ら桢存у澶骁殄 + 驿滑杩驿镐哄滑娌℃珑规э煎︾ㄦ峰圭被屣肩户婵锛瑙邋澶珂苟 + ℃у朵互邋伴玟虹ㄧ - 性能 - PostgreSQL 和其他商用和开源的数据库具有类似的性能。 - 对某些处理它比较快,对其他一些处理它比较慢。 - 与其他数据库相比,我们的性能通常在 +/- 10%之间。 + 妲杞 + PostgreSQL邋朵诲绋邋兼虹姘娈搴宸骁被浼肩妲杞沐驿哄ょ瀹姣杈蹇 + 锛瀵瑰朵讳镐哄ょ瀹姣杈姊 涓宥浠姘娈搴绺姣锛驿滑珂ц戒煎i甯稿 + +/- 10%涔榇 - 可靠性 - 我们知道 DBMS 必须是可靠的,否则它就一点用都没有。 - 我们努力做到发布经 - 过认真测试的,稳定的臭虫最少的代码。每个版本至少有一个月的 beta - 测试时间,并且我们的发布历史显示我们可以提供稳定的,牢固的,可 - 糜谏褂玫陌姹尽N颐窍嘈 - 在这方面我们与其他的数据库软件是相当的。 + 瀵 妲 + 驿滑榻绁殒版哄块』姣瀵 顼煎﹀瀹灏变哥圭ㄩ芥病驺驿滑濯邋灏邋 + 缁杩璁ょ娴璇顼肩己榉驽扮绋冲唬 沔釜珂冲版涓涓 beta + 娴璇娑榇锛骞朵告浠邋稿宀婢绀烘浠互驿剧ǔ瀹顼肩㈠虹锛瀵绋 + 虹浜т娇绋珑娆沔浠镐俊濞杩婀棰驿滑涓宥浠珂版鸿蒋浠舵稿界 - 支持 - 我们的邮件列表提供一个非常大的开发人员和用户的组以帮助解决所碰 - 降娜魏挝侍狻 我们不能保证肯定能解决问题,相比之下,商用 DBMS - 也并不是总能够提供解决方法。 - 直接与开发人员,用户群,手册和源程序接触令 PostgreSQL - 的支持比其他 DBMS - 还要好。还有一些商业性的预包装的支持,可以给提供给那些需要的人 - #ú卧 FAQ 条款 1.5 小节) + 姣 + 驿滑玳欢彖〃驿句镐釜殄父澶х寮邃汉邋绋娣珑讳互甯╄В宄骁 + 扮浠讳介€驿滑涓杞淇璇婊姣杞瑙e抽肩告逛革煎绋姘娈搴杞 + 浠朵瑰苟涓姣婊杞澶驿捐В宄婀娉 + 绱妤涓寮邃汉屣肩ㄦ风兢锛驽彐虹ㄥ烘ヨЕ浣縋ostgreSQL珂姣宥浠姘 + 娈搴杩瑕濂姐杩驿镐哄涓妲珏ㄩ㈡姣姣骘煎互缁驿剧婚d洪瑕玟汉泔 + 彘1.7 灏栾 - 价格 - 我们对任何用途都免费,包括商用和非商用目的。 - 你可以不加限制地向你的产品里加入我们的代码,除了那些我们在上面 - 陌嫒ㄉ骼锷鞯 BSD 风格的版权外。 - - 1.13)丝刂芇ostgreSQL ? - - 如果你在寻找PostgreSQL的掌门人,或是什么中央委员会,或是什么所属公司, - 你只能放弃了---因为一个也不存在,但我们的确有一个 - 委员会和CVS管理组,但这些工作组的设立主要是为了进行管理工作而不是对Pos - tgreSQL进行控制,PostgreSQL项目是由任何人均 - 可参加的开发人员社区和所有用户控制的,你所需要做的就是加入邮件列表,参 - 与讨论即可(要参与PostgreSQL的开发详见 Developer's FAQ 获取信息)。 + 浠锋 + 驿滑瀵逛换浣绋殚藉璐癸煎娆彗ㄥ殄绋绠玢 + 浣 瀵浠ヤ稿 殄跺板浣 玟骇彘 濂驿滑玟唬 锛椁浜椋浜驿滑濞涓棰珑 + 驽0骈澹版 BSD珂涔澶珏瀹广 _________________________________________________________________ -用户客户端问题 +绋娣瀹㈡风楫棰 - 2.1)我们可以用什么语言和 PostgreSQL 打交道? - - PostgreSQL(缺省情况)只安装有C和内嵌式C的接口,其他的接口都是独立的项目 - ,能够分别下载,这些接口项目独立的好处 - 是他们可以有各自的发布计划和各自独立的开发组。 + 2.1) 驿滑瀵浠ョㄤ讳硅ㄥPostgreSQL驿氦轱 + + PostgreSQL(缂虹驽)濯瀹瑁鍯邋宓寮C珂ュo煎朵荤妤澹榻姣绗绔玳」绠锛杞澶 + 邋歌浇锛杩浜妤澹椤圭濂藉 + 姣浠浠互驽瑾珏甯璁″邋瑾绗绔珏煎缁 - 一些编程语言如PHP都有访问 PostgreSQL - 的接口,Perl,TCL,Python以及很多其他语言的接口在 - http://gborg.postgresql.org 上的Drivers/Interfaces小节可找到, - 并且通过Internet很容易搜索到。 + 涓浜缂绋璇 + 瑷濡PHP榻骅楫PostgreSQL珂ュo糚erl鉚CL鉖ython浠ュ寰澶宥浠璇瑷珂ュe + http://gborg.postgresql.org缃绔涓鏒rivers/Interfaces灏桢惧帮 + 骞朵搁杩Internet寰瀹规骁储灏 - 2.2)有什么工具可以把 PostgreSQL 用于 Web 页面? - - 一个介绍以数据库为后台的挺不错的站点是:http://www.webreview.com。 + 2.2) 驿讳瑰伐宸瀵浠ユPostgreSQL绋浜 Web 椤甸 + + 涓涓荤讳互姘娈搴涓哄灏珂轰搁珑规糷ttp://www.webreview.com - 对于 Web 集成,PHP 是一个极好的接口。它在:http://www.php.net/。 + 瀵逛 Web 殒锛PHP 姣涓涓濂界妤澹沐╤ttp://www.php.net/ - 对于复杂的任务,很多人采用 Perl 接口和 CGI.pm 或 mod_perl 。 + 瀵逛哄ゆ玟换濉锛寰澶浜洪绋 Perl 妤澹 浣跨–GI.pm鏒BD::Pg mod_perl - 2.3)PostgreSQL 拥有图形用户界面吗? - - 是的,在 - http://techdocs.postgresql.org/guides/GUITools有一个详细的列表。 + 2.3)PostgreSQL妤驽惧舰绋娣玳㈠锛 + + 邃哥ㄦ锋姣寮婧寮邃汉彖芥惧板惧ょ驽砅ostgreSQL鏕UI寰褰㈠伐宸杞欢锛濞 + PostgreSQL绀惧烘妗f涓涓缁珏琛ㄣ _________________________________________________________________ -系统管理问题 +绯荤荤玳 - 3.1)我怎样能把 PostgreSQL 装在 /usr/local/pgsql 以外的地方? - - 在运行 configure 时加上 --prefix 选项。 + 3.1)骀 疯芥PostgreSQL瑁濞 /usr/local/pgsql 浠ュょ灏婀锛 + + 濞杩琛 configure 娑 涓 --prefix 殚」 - 3.2)我如何控制来自其他主机的连接? - - 缺省时,PostgreSQL 只允许通过 unix - 域套接字或TCP/IP方式且来自本机的连接。 - 你只有在修改了配置文件postgresql.conf中的listen_addresses,且也在配置 - 募䅟g_hba.conf中打开了 主机为基础( host-based - )的身份认证,并重新启动PostgreSQL,否则其他机器是不能与你的PostgreSQL - 服务器连接的。 + 3.2) 驽︿芥у舵ヨ朵荤佃玷挎ワ + + 缂虹驽典革糚ostgreSQL濯彖妤瑾娆婧涓殍 unix 邋ユュ鎀CP/IP婀寮玷挎ャ + 浣 濯驽ㄤ慨婀浜殓疆驿欢postgresql.conf涓 + 鏻isten_addresses锛涓涔濞殓疆驿欢$PGDATA/pg_hba.conf涓驽间 + 搴浜杩绋绲栾 host-based + 锛玷韩浠借璇锛骞堕姘瀵濞PostgreSQL锛濡邋朵荤佃姣涓杞涓浣 鏟ostgreSQL + 驽″ㄨ胯¤挎ョ - 3.3)我怎样调整数据库引擎以获得更好的性能? - - 有三个主要方面可以提升PostgreSQL的潜能。 + 3.3) 骀 疯版存版哄兼浠ヨ峰炬村ソ珂ц斤 + + 驿镐釜涓昏︽归㈠互驽PostgreSQL珂借姐 - 查询方式的变化 - 这主要涉及修改查询方式以获取更好的性能: + 妤璇㈡瑰肩邋 + 杩涓昏︽跺淇规ヨ婀寮浠ヨ峰娲濂界妲杞: - + 创建索引,包括表达式和部分索引; - + 使用COPY语句代替多个Insert语句; - + 将多个SQL语句组成一个事务以减少提交事务的开销; - + 从一个索引中提取多条记录时使用CLUSTER; - + 从一个查询结果中取出部分记录时使用LIMIT; - + 使用预编译式查询(Prepared Query); - + 使用ANALYZE以保持精确的优化统计; - + 定期使用 VACUUM 或 pg_autovacuum - + 进行大量数据更改时先删除索引(然后重建索引) + + 邋缓绱㈠硷煎娆琛ㄨ揪寮彘ㄥ绱㈠硷 + + 浣跨–OPY璇濂浠f垮や釜Insert璇濂锛 + + 灏澶涓猄QL璇濂缁驿镐釜浜濉浠ュ灏驿氦浜濉珏奸锛 + + 浠涓涓储寮涓驽澶妗璁板芥朵娇绋CLUSTER锛 + + 浠涓涓ヨ缁驿稿搴楱彖褰娑浣跨↙IMIT锛 + + 浣跨ㄩ㈢艰兼ヨ锛Prepared Query)锛 + + 浣跨ˋNALYZE浠ヤ挎绮剧‘玟煎缁璁★ + + 瀹驿娇绋 VACUUM pg_autovacuum + + 杩琛澶ч姘娈娲婀娑邋 椁绱㈠硷肩跺殄缓绱㈠硷 - 服务器的配置 - 配置文件postgres.conf中的很多设置都会影响性能,所有参数的列表可 - 见: Administration Guide/Server Run-time Environment/Run-time - Configuration, 有关参数的解释可见: - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html 和 - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html。 + 驽″ㄧ殓疆 + 殓疆驿欢postgres.conf涓 + 珏惧よ缃戒煎奖彐ц斤兼驽姘珏琛ㄥэ + 绠$彐/姘娈搴驽″ㄨ胯$/姘娈搴驽″ㄨ胯¢缃 + 驽冲姘玷В殄э糷ttp://www.varlena.com/varlena/GeneralBits/Tid + bits/annotated_conf_e.html + http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html - 硬件的选择 - 计算机硬件对性能的影响可浏览 + 纭欢玳姗 + 璁$虹‖浠跺妲杞珏奖邋佃 http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde - x.html 和 http://www.powerpostgresql.com/PerfList/。 + x.html http://www.powerpostgresql.com/PerfList/ - 3.4)PostgreSQL 里可以获得什么样的调试特性? - - PostgreSQL 有很多类似 log_* - 的服务器配置变量可用于查询的打印和进程统计,而这些工作对调试和性能测试 - 很有帮助。 + 3.4)PostgreSQL殄互璺寰浠涔 风璋璇绻妲锛 + + PostgreSQL 驽惧ょ被浼 log_* + 珂濉濞殓疆彘瀵绋浜妤璇㈢驽板杩绋缁璁★艰杩浜宸ヤ藉璋璇彐ц芥佃炬甯 + ┿ - 3.5)为什么在试图连接时收到“Sorry, too many clients”消息? - - 这表示你已达到缺省100个并发后台进程数的限制,你需要通过修改postgresql. - conf文件中的max_connections值来 - 增加postmaster的后台并发处理数,修改后需重新启动postmaster。 + 3.5) 涓轰讳瑰ㄨ捐挎ユ舵跺扳Sorry, too many + clients锛宸叉澶ょㄦ疯挎ワ尖娑姣锛 + + 杩琛ㄧず浣 宸茶揪灏缂虹100涓苟邋灏杩绋姘玳宥锛浣 殍﹂杩淇筽ostgres + ql.conf驿欢涓鏼ax_connections寮妤 + 澧 postmaster珏灏骞跺澶珂帮间慨婀彘殒板╬ostmaster - 3.6)为什么要在升级 PostgreSQL 主要发布版本时做 dump 和 restore ? - - PostgreSQL 开发组对每次小的升级仅做了较少的修改,因此从 7.4.0 升级到 - 7.4.1 不需要 dump 和 restore。 但是主要的升级(例如从 7.3 到 - 7.4)通常会修改系统表和数据表的内部格式。 - 这些变化一般比较复杂,因此我们不维数据文件的向后兼容。 dump - 将数据按照通用的格式输出,随后可以被重新加载并使用新的内部格式。 + 3.6)PostgreSQL珏绾ц跨ㄦ濯浜邋 锛 + + PostgreSQL 寮彗诲姣娆″扮娆珏绾т富瑕濯邃轰镐築ug淇e伐浣锛 妞浠 + 7.4.8 彗骇灏 7.4.9 涓殍 dump restore锛浠殍﹀姝 + ㈡版烘濉濞锛瀹瑁娲姘彗杞欢屣肩跺殄濉濞宄瀵 - 3.7)(使用PostgreSQL)我需要使用什么计算机硬件 ? - - 由于计算机硬件大多数是兼容的,人们总是倾向于相信所有计算机硬件质量也是 - 相同的。事实上不是, ECC RAM(带奇偶校验的内存),SCSI - (硬盘)和优质的主板比一些便宜货要更加可靠且具有更好的性能。PostgreSQL - 几乎可以运行在任何硬件上, - 但如果可靠性和性能对你的系统很重要,你就需要全面的研究一下你的硬件配置 - 了。在我们的邮件列表上也有关于 硬件配置和性价比的讨论。 + 骀PostgreSQL珑ㄦ峰鸿濞骀ヨ匡间 驿娇绋玟富珂肩灏婀杩珂甯灏藉揩彗 + 骇沐敖绠℃彗骇瀵杞榻驿哥归i╋糚ostgreSQL珏版硅跨浠浠姣璁捐绋妤 + 慨姝 + d镐築ug顼间唬 婀濞杈灏锛驿互椋椹杩姣寰灏玢PostgreSQL绀惧鸿涓轰歌 + 宓涓涓彗骇玳i╄挎や哄绾х + + 涓荤娆珏绾э间惧︿ 7.3 灏 7.4锛殄父浼淇圭郴缁琛ㄥ姘娈琛ㄧ彘ㄦ 煎笺 + 杩浜婀邃歌惧ゆ锛 妞驿滑涓缁存姘娈驿欢珏邋煎妲沐 妞浠桤娆涓 + 杩琛姘娈瀵煎猴糳ump锛/缍邋ㄦ扮娆涓 + 杩琛姘娈瀵煎ワ紃eload锛瀵逛富珂彗骇姣蹇椤荤 + + 3.7)(浣跨≒ostgreSQL)骈瑕浣跨ㄤ讳硅绠婧纭欢 锛 + + 绫浜璁$虹‖浠跺ぇ澶姘姣寮瀹圭锛浜轰滑婊姣寰邃虹镐俊骀璁$虹‖浠惰 + 川殇规稿玢浜瀹涓涓姣锛 ECC RAM锛甯﹀ュ舵 ¢邋锛锛SCSI + 锛纭锛邃艰川玟富婵姣涓浜渚垮揣瑕娲 瀵 涓宸骀村ソ珂ц姐PostgreSQL + 涔瀵浠ヨ胯″ㄤ换浣纭欢涓锛 + 浣濡驽 妲彐ц藉浣 珑郴缁寰殍︼间 灏遍瑕濞棰珑 绌朵镐镐 珑‖浠堕 + 疆浜沐ㄦ浠楫浠跺琛ㄤ镐规宄浜 纭欢殓疆彐т环姣玷璁恒 _________________________________________________________________ -操作问题 +驿介 - 4.1)如何只选择一个查询结果的头几行?或是随机的一行? - - 如果你只是要提取几行数据,并且你在执行查询中知道确切的行数,你可以使用 - LIMIT功能。 如果有一个索引与 ORDER BY中的条件匹配,PostgreSQL - 可能就只处理要求的头几条记录, - (否则将对整个查询进行处理直到生成需要的行)。如果在执行查询功能时不知 - 道确切的记录数, 可使用游标(cursor)和FETCH功能。 + 4.1) 濡浣濯殒╀镐釜妤璇㈢绘珏ご 琛锛骀婧玟歌★ + + 濡驿 濯姣瑕驽 琛姘娈锛骞朵镐 濞妲琛妤璇腑 + 绁殓‘彗琛姘锛浣 瀵浠ヤ娇绋LIMIT彖姐 濡骀涓涓储寮涓 ORDER BY涓 + 珂′欢骞轱糚ostgreSQL 瀵杞灏卞ょ瑕姹珏ご 妗璁板斤 + 锛濡邋板娲涓ヨ杩琛澶珑村扮骈瑕玷★笺濡驽ㄦц℃ヨ彖芥朵哥ラ纭 + 玷褰姘锛 瀵浣跨ㄦ父 (cursor)錐ETCH彖姐 - 可使用以下方法提取一行随机记录的: - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; + 瀵浣跨ㄤ互涓婀娉驽涓琛殒鸿褰顼 + SELECT cols + FROM tab + ORDER BY random() + LIMIT 1 ; - 4.2)如何查看表、索引、数据库以及用户的定义?如何查看psql里用到的查询指令并 - 允舅牵 - - 在psql中使用 \dt - 命令来显示数据表的定义,要了解psql中的完整命令列表可使用\? - ,另外,你也可以阅读 psql 的源代码 - 文件pgsql/src/bin/psql/describe.c,它包括为生成psql反斜杠命令的输出的 -  SQL 命令。你还可以带 -E 选项启动 psql, - 这样它将打印出执行你在psql中所给出的命令的内部实际使用的SQL查询。Postg - reSQL也提供了一个兼容SQL的INFORMATION SCHEMA接口, - 你可以从这里获取关于数据库的信息。 + 4.2) + 濡浣妤玷〃沌储寮沔版轰互彗ㄦ风瀹涔锛濡浣妤鏿sql殓ㄥ扮妤璇㈡浠ゅ苟婢绀哄滑 + 锛 + + 濞psql涓浣跨 \dt 褰浠ゆユ剧ず姘娈琛ㄧ瀹涔锛瑕浜瑙sql涓 + 珏村戒护彖〃瀵浣跨╘? 锛濡澶锛浣 涔瀵浠ラ璇 psql 珂轰唬 + 驿欢pgsql/src/bin/psql/describe.c锛瀹彐负珂psql彐 褰浠ょ杈搴珂 SQL + 褰浠ゃ浣 杩瀵浠ュ甫 -E 殚」瀵濞 psql锛 杩 峰版灏搴浣 濞psql涓 + 骁诲虹褰浠ゆц℃剁彘ㄥ浣跨ㄧSQL妤璇㈣ + 濂鉖ostgreSQL涔驿句轰镐釜寮瀹筍QL鏘NFORMATION SCHEMA妤澹锛 + 浣 瀵浠ヤ昏块璺邋充烘版虹淇℃ - 在系统中有一些以pg_ 打头的系统表也描述了表的定义。 + 濞绯荤讳镐规涓浜浠g_ 驽ご珑郴缁琛ㄤ规杩颁鸿〃珏广 - 使用 psql -l 指令可以列出所有的数据库。 + 浣跨 psql -l 驿护瀵浠ュ搴骀珂版恒 - 也可以浏览一下 - pgsql/src/tutorial/syscat.source文件,它列举了很多可从数据库系统表中获 - 取信息的SELECT语法。 + 涔瀵浠ユ佃т镐 + pgsql/src/tutorial/syscat.source驿欢锛瀹邃妇浜寰澶瀵浠姘娈搴绯荤昏〃涓 + 璺邃俊姣鏢ELECT璇娉 - 4.3)如何更改一个字段的数据类型? - - 在8.0版本里更改一个字段的数据类型很容易,可使用 ALTER TABLE ALTER - COLUMN TYPE 。 + 4.3) 濡浣娲婀涓涓娈电姘娈绫诲锛 + + 濞8.0珂娲婀涓涓娈电姘娈绫诲寰瀹规锛瀵浣跨 ALTER TABLE ALTER + COLUMN TYPE - 在以前的版本中,可以这样做: - BEGIN; + 濞浠ュ珑娆涓锛瀵浠ヨ挎 峰锛 + BEGIN; ALTER TABLE tab ADD COLUMN new_col new_data_type; UPDATE tab SET new_col = CAST(old_col AS new_data_type); ALTER TABLE tab DROP COLUMN old_col; COMMIT; - 你然后可以使用VACUUM FULL tab 指令来使系统收回无效数据所占用的空间。 + 浣 缍邋互浣跨╒ACUUM FULL tab 驿护妤浣跨郴缁娑彐 骀版 绋珑┖榇 - 4.4)一行记录,一个表,一个库的最大尺寸是多少? - - 下面是一些限制: + 4.4) 彐¤褰锛邃釜琛煎涓版虹驽ぇ殄舵ゅ帮 + + 涓棰姣涓浜殄讹 - 一个数据库最大尺寸? 无限制(已存在有 32TB 的数据库) - 一个表的最大尺寸? 32 TB - 一行记录的最大尺寸? 1.6 TB - 一个字段的最大尺寸? 1 GB - 一个表里最大行数? 无限制 - 一个表里最大列数? 250-1600 (与列类型有关) - 一个表里的最大索引数量? 无限制 + 邃釜姘娈搴驽ぇ灏哄锛 殄讹煎凡邋ㄦ 32TB 珂版猴 + 邃釜琛ㄧ驽ぇ灏哄锛 32 TB + 涓琛璁板界驽ぇ灏哄锛 1.6 TB + 涓涓娈电驽ぇ灏哄? 1 GB + 涓涓〃殒澶ц℃帮 殄 + 涓涓〃殒澶у姘锛 250-1600 锛涓彗被彐宄锛 + 涓涓〃殓驽ぇ绱㈠兼伴锛 殄 - 当然,实际上没有真正的无限制,还是要受可用磁盘空间、可用内存/交换区的 - 圃肌 事实上,当这些数值变得异常地大时,系统性能也会受很大影响。 + 褰缍锛瀹殇告病骁妫珂 殄讹艰挎﹀瀵绋纾珑┖榇沐ㄥ/浜ゆ㈠虹宥绾︺ + 浜瀹涓锛褰涓杩拌夸烘板煎寰寮甯稿板ぇ娑锛绯荤绘ц戒逛煎寰澶у奖邈 - 表的最大尺寸 32 TB 不需要操作系统对大文件的支持。大表用多个 1 GB - 的文件存储,因此文件系统尺寸的限制是不重要的。 + 彖〃珂澶уぇ灏 32 TB + 涓殍︽浣绯荤诲邃釜驿欢涔殍夸瑰ぇ珂沐ぇ琛ㄧㄥや釜 1 GB 珂浠跺 + 濞锛 妞驿欢绯荤诲ぇ灏玳宥姣涓殍︾ - 如果缺省的块大小增长到 32K ,最大的表尺寸和最大列数还可以增加到四倍。 + 濡骁己珑邋ぇ灏澧榭灏 32K 锛驽ぇ珏琛ㄥぇ灏彐澶у姘杩瀵浠ュ㈠ 灏邋 - 4.5)存储一个典型的文本文件里的数据需要多少磁盘空间? - - 一个 Postgres - 数据库(存储一个文本文件)所占用的空间最多可能需要相当于这个文本文件自 - 身大小5倍的磁盘空间。 + 驿镐釜殄跺氨姣涓杞瀵瑰ぇ灏澶浜2000瀛 + 桤邋寤虹储寮沐垢杩灏姣杩 风绱㈠煎惧扮ㄥ般殍垮澶瀛 + 桢珏瀹硅胯D5彗ㄨ跨绘杩琛褰姘绱㈠煎彗瀵涓妲寰灏淇璇锛 + 骞朵稿ㄦ妫绱㈠璁稿邃哥彖胯℃绱€ - 例如,假设有一个 100,000 行的文件,每行有一个整数和一个文本描述。 - 假设文本串的平均长度为20字节。文本文件占用 2.8 MB。存放这些数据的 - PostgreSQL 数据库文件大约是 6.4 MB: - 32 字节: 每行的头(估计值) - 24 字节: 一个整数型字段和一个文本型字段 - + 4 字节: 页面内指向元组的指针 + 4.5) 邋ㄤ镐釜甯彗骀浠堕珂版瑕澶灏纾珑┖榇锛 + + 涓涓 Postgres 姘娈搴锛瀛 + 濞涓涓娆驿欢锛驽 绋珑┖榇驽ゅ介瑕绺褰浜杩涓娆驿欢瑾韬ぇ灏5彗纾 + 珑┖榇 + + 渚濡锛彖驿镐釜 100,000 琛珂浠讹兼℃涓涓存板涓涓娆骅堪 + 彖骀覆珏钩彘垮害涓20彖沔娆驿欢 绋 2.8 MB沐 + 婢杩浜姘娈鏟ostgreSQL姘娈搴驿欢澶х害姣 6.4 MB: + 28 彖: 姣琛珏ご锛澶х害寮锛 + 24 彖: 涓涓存板彐邃镐釜骀彐 + + 4 彖: 椤甸㈠驽彗荤骈 ---------------------------------------- - 60 字节每行 + 56 彖姣琛 - PostgreSQL 数据页的大小是 8192 字节 (8 KB),则: + PostgreSQL 姘娈椤电澶у版 8192 彖 (8 KB)锛屣 - 8192 字节每页 - ------------------- = 136 行/数据页(向下取整) - 60 字节每行 + 8192 彖姣椤 + ------------------- = 146 琛/姘娈椤碉煎涓彐达 + 56 彖姣琛 - 100000 数据行 - -------------------- = 735 数据页(向上取整) - 128 行每页 + 100000 姘娈琛 + -------------------- = 685 姘娈椤碉煎涓彐达 + 146 琛/姘娈椤 - 735 数据页 * 8192 字节/页 = 6,021,120 字节(6 MB) + 685 姘娈椤 * 8192 彖/椤 = 5,611,520 彖锛5.6 MB锛 - 索引不需要这么多的额外消耗,但也确实包括被索引的数据,因此它们也可能很 - 大。 + 绱㈠间搁瑕杩涔澶玳㈠ゆ惰锛浣涔纭娆琚储寮珂版煎 姝 + ゅ滑涔瀵杞寰澶с - 空值NULL存放在位图中,因此占用很少的空间。 + 绌哄糔ULL彐惧ㄤ藉句革煎 妞 绋寰灏珑┖榇 - 4.6)为什么我的查询很慢?为什么这些查询没有利用索引? - - 并非每个查询都会自动使用索引。只有在表的大小超过一个最小值,并且查询只 - 会选中表中较小比例的记录时才会采用索引。 - 这是因为索引扫描引起的随即磁盘存取可能比直接地读取表(顺序扫描)更慢。 + 4.6) 涓轰讳规珂ヨ寰姊锛涓轰讳硅夸烘ヨ娌℃濠绋绱㈠硷 + + 骞堕姣涓ヨ榻浼瑾濞浣跨ㄧ储寮沐濞琛ㄧ澶у拌惰夸镐釜驽板硷煎苟涓妤 + 璇㈠奸涓琛ㄤ歌惧版剧璁板芥舵浼殓ㄧ储寮 + 杩姣 涓虹储寮娅驽艰捣玳宄纾珏邋芥存ュ拌彖〃锛椤哄烘锛娲姊 - 为了判断是否使用索引,PostgreSQL必须获得有关表的统计值。这些统计值可以 - 使用 VACUUM ANALYZE,或 ANALYZE 获得。 - 使用统计值,优化器知道表中有多少行,就能够更好地判断是否利用索引。 - 统计值对确定优化的连接顺序和连接方法也很有用。在表的内容发生变化时,应 - 定期进行统计值的更新收集。 + 涓轰哄ゆ + 姣濡浣跨ㄧ储寮锛PostgreSQL蹇椤昏峰炬宄琛ㄧ缁璁″笺杩浜缁璁″煎互浣跨 + VACUUM ANALYZE锛 ANALYZE 璺寰 浣跨ㄧ昏寮锛浼邋ㄧラ琛ㄤ腑 + 驽ゅ拌★煎氨杞澶娲濂藉板ゆ姣濡濠绋绱㈠笺 + 缁璁″煎纭煎玷挎ラ『搴彖挎ユ规充瑰炬绋沐ㄨ〃珏瀹瑰珏彐讹煎哄杩 + 琛缁璁″肩娲姘娑殂 - 索引通常不用于 ORDER BY - 或执行连接。对一个大表的一次顺序扫描,再做一个显式的排序通常比索引扫描 - 要快。 + 绱㈠奸甯镐哥ㄤ ORDER BY + 骀ц¤挎ャ瀵逛镐釜澶ц〃玟告椤哄烘邋涓娆℃搴殄父姣绱㈠兼瑕蹇缍 + 栾煎︽灏 LIMIT ORDER BY + 缁邋ㄤ歌捣浣跨ㄧ璇锛殄父灏浼浣跨ㄧ储寮锛 涓鸿挎朵昏垮琛ㄤ腑 + 玟稿伴ㄥ璁板姐 - 但是,在 LIMIT 和 ORDER BY 结合使用时经 - 常会使用索引,因为这只会返回表的一小部分。 实际上,虽然 MAX() 和 MIN() - 并不使用索引,通过对 ORDER BY 和 LLIMIT - 使用索引取得最大值和最小值也是可以的: - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - - 如果你确信PostgreSQL的优化器使用顺序扫描是不正确的,你可以使用SET - enable_seqscan TO 'off'指令, - 然后再次运行查询,你就可以看出使用一个索引扫描是否确实要快一些。 + 濡驿 纭俊PostgreSQL玟煎濞浣跨ㄩ『搴娅骀告g‘顼间 瀵浠ヤ娇绋SET + enable_seqscan TO 'off'驿护妤宄殚『搴娅骘 + 缍邋娆¤胯℃ヨ锛浣 灏卞互珏轰娇绋涓涓储寮娅骀︾‘瀹瑕蹇镐恒 - 当使用通配符操作,例如 LIKE 或 ~ 时,索引只能在特定的情况下使用: - * 字符串的开始部分必须是普通字符串,也就是说: - + LIKE 模式不能以 % 打头。 - + ~ (正则表达式)模式必须以 ^ 打头。 - * 字符串不能以匹配多个字符的模式类打头,例如 [a-e]。 - * 大小写无关的查找,如 ILIKE 和 ~* 等不使用索引,但可以用 4.8 - 节描述的函数索引。 - * 在做 initdb 时必须采用缺省的本地设置 C - locale,因为系统不可能知道在非C locale情况时下一个最大字符是什么。 - 在这种情况下,你可以创建一个特殊的text_pattern_ops索引来用于LIKE的 - 索引。 + 褰浣跨ㄩ殓驿斤间惧 LIKE ~ 娑锛绱㈠煎藉ㄧ瑰驽典镐娇绋锛 + * 彗涓茬寮濮楱邋块』姣娈殄绗︿覆锛涔灏辨锛 + + LIKE 妯″间歌戒互 % 驽ご + + ~ 锛妫彖〃杈惧硷兼ā寮蹇椤讳互 ^ 驽ご + * 彗涓蹭歌戒互骞殄や釜彗珂ā寮绫绘澶达间惧 [a-e] + * 澶у板 宄珂ユ撅煎 ILIKE ~* 玟镐娇绋绱㈠硷间藉互绋 4.8 + 桄杩扮琛ㄨ揪寮绱㈠笺 + * 濞 initdb 娑蹇椤婚绋缂虹珂拌缃 C + locale锛 涓虹郴缁涓瀵杞绁殄ㄩC locale驽垫朵镐镐釜驽ぇ彗姣浠涔 + 濞杩绉驽典革间 瀵浠ュ寤轰镐釜绻娈鐃ext_pattern_ops绱㈠兼ョㄤ篖IKE + 珑储寮 - 在8.0之前的版本中,除非要查询的数据类型和索引的数据类型相匹配,否则索 - 常是未被用到,特别是对int2,int8和数值型的索引。 + 濞8.0涔彗珂腑 + 锛椁殍︽ヨ珂版被邋绱㈠肩姘娈绫诲绺骞轱煎﹀绱㈠肩诲父姣妾琚ㄥ帮肩 + 瑰int2,int8彐板煎珑储寮 - 4.7)我如何才能看到查询优化器是怎样评估处理我的查询? - - 参考 EXPLAIN 手册页。 + 4.7) 驽︿芥杞珏版ヨ浼邋ㄦ 疯及澶珂珂ヨ锛 + + 彖 EXPLAIN 驽椤点 - 4.8)我怎样做正则表达式搜索和大小写无关的正则表达式查找?怎样利用索引进行大 - ⌒次薰夭檎遥 - - 操作符 ~ 处理正则表达式匹配,而 ~* - 处理大小写无关的正则表达式匹配。大写些无关的 LIKE 变种成为 ILIKE。 + 4.8) 骀 峰妫彖〃杈惧兼绱㈠澶у板 宄珂 + e琛ㄨ揪寮妤婢锛骀 峰╃ㄧ储寮杩琛澶у板 宄妤婢锛 + + 驿界 ~ 澶珂e琛ㄨ揪寮骞轱艰 ~* 澶珏ぇ灏彐 宄珂 + e琛ㄨ揪寮骞殂澶у板 宄 LIKE 彗ф涓 ILIKE - 大小写无关的等式比较通常写做: + 澶у板 宄珑寮姣杈殄父邋锛 SELECT * FROM tab WHERE lower(col) = 'abc'; - 这样将不会使用标准的索引。但是可以创建一个可被利用的函数索引: + 杩 峰颁镐间娇绋 彗绱㈠笺浣姣瀵浠ュ寤轰镐釜濞杩绉驽典镐娇绋玷〃杈惧肩 + 储寮: CREATE INDEX tabindex ON tab (lower(col)); - 4.9)在一个查询里,我怎样检测一个字段是否为 NULL - ?我如何才能准确排序而不论某字段是否含 NULL 值? - - 用 IS NULL 和 IS NOT NULL 测试这个字段,具体方法如下: + 濡驿歌堪绱㈠煎ㄥ寤烘跺 濂UNIQUE绾︽锛杞缍绱㈠煎娈佃韩邋瀵浠ュ + 濞澶у板涓殓邋锛浣濡骀UNIQUE绾︽屣艰夸哄瀹逛歌戒讳绘ぇ灏邃稿锛濡邃 + 奸 驽茬笺涓轰轰胯稿玷跨ф宓锛瀵浠ヤ娇绋CHECK绾︽妗浠舵姣瑙﹀濞濞褰 + 濂娑杩琛殄躲 + + 4.9) 濞涓涓ヨ轱兼骀 锋f典镐釜彐姣濡涓 NULL 锛驽︿芥杞彗‘驽鸿涓璁烘瀛 + 娈垫﹀ NULL 寮锛 + + 绋 IS NULL IS NOT NULL 娴璇杩涓娈碉煎蜂芥规冲︿革 SELECT * FROM tab WHERE col IS NULL; - 为了能对含 NULL字段排序,可在 ORDER BY 条件中使用 IS NULL和 IS NOT - NULL 修饰符,条件为真 true 将比条件为假false - 排在前面,下面的例子就会将含 NULL 的记录排在结果的上面部分: + 涓轰鸿藉瀚 NULL彐驽猴煎 ORDER BY 妗浠朵镐娇绋 IS NULL IS NOT + NULL 淇グ绗︼兼′欢涓虹 true 灏姣妗浠朵负錰alse 驽ㄥ棰锛涓棰玟惧 + 灏变煎板 NULL 玷褰驽ㄧ绘玟搁㈤ㄥ锛 SELECT * FROM tab ORDER BY (col IS NOT NULL) - 4.10)各种字符类型之间有什么不同? - - 类型 内部名称 说明 - VARCHAR(n) varchar - 指定了最大长度,变长字符串,不足定义长度的部分不补齐 - CHAR(n) bpchar 定长字符串,实际数据不足定义长度时,以空格补齐 - TEXT text 没有特别的上限限制(仅受行的最大长度限制) - BYTEA bytea 变长字节序列(使用NULL也是允许的) - "char" char 一个字符 + 4.10) 彗у绗︾被邃归存浠涔涓屣 + + 绫诲 彘ㄥ绉 璇存 + VARCHAR(n) varchar 驽烘澶ч垮害锛彘垮 + 绗︿覆锛涓瓒冲归垮害玳ㄥ涓琛ラ + CHAR(n) bpchar 瀹榭彗涓诧煎姘娈涓瓒冲归垮害娑锛浠ョ┖ 艰ˉ榻 + TEXT text 娌℃绻瀚玟搁殄讹间诲琛珂澶ч垮害殄讹 + BYTEA bytea 彘垮桢哄锛浣跨∟ULL彗涔姣彖顼 + "char" char 邃釜彗 - 在系统表和在一些错误信息里你将看到内部名称。 + 濞绯荤昏〃邋ㄤ镐洪璇俊姣殇 灏珏板楱彗О - 上面所列的前四种类型是"varlena"(变长)类型(也就是说,开头的四个字节 - 浅ざ龋竺娌攀鞘荩 于是实际占用的空间比声明的大小要多一些。 - 然而这些类型都可以被压缩存储,也可以用 TOAST - 脱机存储,因此磁盘空间也可能比预想的要少。 + 涓棰驽珏彗х被彐"varlena"锛彘匡肩被屣间瑰氨姣璇达煎煎ご珏涓 + 桄垮害锛彘㈡姣姘娈锛 浜姣瀹殄 绋珑┖榇姣澹版珏ぇ灏瑕澶涓浜 + 缍梃夸虹被邋﹀瑰鹃挎堕藉互琚缂╁濞锛 姝 + ょg绌洪翠瑰芥㈡崇瑕灏 - VARCHAR(n) 在存储限制了最大长度的变长字符串是最好的。 TEXT - 适用于存储最大可达 1G左右但未定义限制长度的字符串。 + VARCHAR(n) 濞邋ㄩ宥浜驽ぇ榭搴︾彘垮绗︿覆姣驽ソ玢 TEXT 殓ㄤ哄 + 濞驽ぇ瀵杈 1G宸﹀充芥归宥榭搴︾彗涓层 - CHAR(n) 最适合于存储长度相同的字符串。 - CHAR(n)会根据所给定的字段长度以空格补足(不足的字段内容), 而 - VARCHAR(n) 只存储所给定的数据内容。 BYTEA - 用于存储二进制数据,尤其是包含 NULL - 字节的值。这些类型具有相似的性能特性。 + CHAR(n) 骈邃哄濞榭搴︾稿珏绗︿覆 CHAR(n)浼 规缁瀹珏 + 娈甸垮害浠ョ┖ 艰ˉ瓒筹间歌冻珏娈靛瀹癸硷 VARCHAR(n) 濯瀛 + 濞骁诲姘娈邋 BYTEA 绋浜邋ㄤ鸿垮舵版煎挨宥姣邋 NULL 瀛 + 桤寮汨夸虹被邋锋宸稿ょ妲杞 - 4.11.1)我怎样创建一个序列号/自动递增的字段? - - PostgreSQL 支持 SERIAL - 数据类型。它在字段上自动创建一个序列和索引。例如: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); + 4.11.1) 骀 峰寤轰镐釜搴邋锋姣瑾濞殄㈢彐锛 + + PostgreSQL 姣 SERIAL 姘娈绫诲泔煎 + 娈靛逛负SERIAL屣煎拌ㄥ寤轰镐釜搴彗驽间惧︼ + CREATE TABLE person ( + id SERIAL, + name TEXT + ); - 会自动转换为: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); + 浼瑾濞杞负浠ヤ窼QL璇濂锛 + CREATE SEQUENCE person_id_seq; + CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT + ); - 参考 create_sequence 手册页获取关于序列的更多信息。 + 彖 create_sequence 驽椤佃峰宄浜搴彗驽ㄧ娲澶淇℃ - 4.11.2)我如何获得一个插入的序列号的值? - - 一种方法是在插入之前先用函数 nextval() 从序列对象里检索出下一个 SERIAL - 值,然后再显式插入。使用 4.11.1 里的例表,可用伪码这样描述: - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); + 4.11.2) 驽︿借峰句镐釜驽ョ搴邋风寮锛 + + 涓绉婀娉姣濞驽ヤ瑰彗ㄥ芥 nextval() 浠搴邋璞¢妫绱㈠轰镐镐釜 SERIAL + 寮锛缍邋绋妞寮绮剧‘灏驽ャ浣跨 4.11.1 殓渚琛煎ㄤ吉 杩 锋杩帮 + new_id = execute("SELECT nextval('person_id_seq')"); + execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - 这样还能在其他查询中使用存放在 new_id 里的新值(例如,作为 person - 表的外键)。 注意自动创建的 SEQUENCE 对象的名称将会是 - __seq, 这里 table 和 serialcolumn - 分别是你的表的名称和你的 SERIAL 字段的名称。 + 杩 疯胯藉ㄥ朵绘ヨ涓浣跨ㄥ婢濞 new_id 殓姘寮锛渚濡锛浣涓哄绉 person + 琛ㄧ澶楫锛 娉ㄦ瑾濞邋缓 SEQUENCE 瀵硅薄珏绉板颁兼 +
__seq锛 杩 table serialcolumn + 邋 玷〃珏绉板浣 SERIAL 彐珏绉般 - 类似的,在 SERIAL 对象缺省插入后你可以用函数 currval() 检索刚赋值的 - SERIAL 值,例如: - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); + 绫讳技顼煎 SERIAL 瀵硅薄缂虹驽ュ浣 瀵浠ョㄥ芥 currval() 妫绱㈠璧寮 + SERIAL 寮锛渚濡锛 + execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); + new_id = execute("SELECT currval('person_id_seq')"); - 4.11.3)使用 currval() 会导致和其他用户的冲突情况(race condition)吗? - - 不会。currval() 返回的是你本次会话进程所赋的值而不是所有用户的当前值。 + 4.11.3) 彐朵娇绋 currval() 浼瀵艰村宥浠绋娣珏茬宓屣 + + 涓浼鉩urrval() 杩彗姣浣 娆娆′艰跨ㄦ璧珏艰涓姣骀绋娣珏藉寮 - 4.11.4)为什么不在事务异常中止后重用序列号呢?为什么在序列号字段的取值中存在 - 间断呢? - - 为了提高并发性,序列号在需要的时候赋予正在运行的事务,并且在事务结束之 - 前不进行锁定, 这就会导致异常中止的事务后,序列号会出现间隔。 + 4.11.4) 涓轰讳逛稿ㄤ哄″煎父涓姊彘绋搴邋峰间负浠涔濞搴邋峰娈电邋间稿濞榇姝 + 澧锛 + + 涓轰烘楂骞跺妲锛搴邋峰ㄩ瑕珂跺璧浜姝 + eㄨ胯$浜濉锛骞朵稿ㄤ哄$绘涔邃歌胯¢瀹锛 杩灏变煎璐寮甯镐腑 + 姊玟哄″锛搴邋蜂煎虹伴撮 - 4.12)什么是 OID ?什么是 CTID ? - + 4.12) 浠涔姣 OID 锛浠涔姣 CTID 锛 + PostgreSQL - 里创建的每一行记录都会获得一个唯一的OID,除非在创建表时使用WITHOUT - OIDS选项。 OID创建时会自动生成一个4字节的整数,所有 OID 在整个 - PostgreSQL 中均是唯一的。 然而,它在超过40亿时将溢出, - OID此后会出现重复。PostgreSQL 在它的内部系统表里使用 OID - 在表之间建立联系。 + 殄寤虹姣涓琛璁板介戒艰峰句镐釜瀵涓鏞ID锛椁殄ㄥ寤鸿〃娑浣跨╓ITHOUT + OIDS殚」 OID邋缓娑浼瑾濞珂涓涓4彖珂存帮兼 OID + 濞绺搴PostgreSQL驽″ㄤ稿姣瀵涓玢 缍栾煎ㄨ惰40浜挎跺版孩搴锛 OID姝 + ゅ浼搴绨殄ゃPostgreSQL 濞瀹珏楱绯荤昏〃殇娇绋 OID 濞琛ㄤ归村缓绔桤郴 - 在用户的数据表中,最好是使用SERIAl来代替OID - 因为SERIAL只是保证在单个表中数据是唯一的,这样它溢出的可能性就非常小了 - , SERIAL8可用来保存8字节的序列号字段。 + 濞绋娣珂版〃涓锛驽ソ姣浣跨⊿ERIAl妤浠f縊ID + 涓篠ERIAL濯瑕淇璇濞邃釜琛ㄤ腑 + 珂板兼哥灏卞互浜锛杩 峰孩搴珏芥у氨殄父灏浜锛 + SERIAL8瀵绋妤淇8彖珏哄姘寮 - CTID 用于标识带着数据块(地址)和(块内)偏移的特定的物理行。 CTID - 在记录被更改或重载后发生改变。索引入口使用它们指向物理行。 + CTID 绋浜 璇甯︾姘娈屣煎板锛屣煎屣煎绉荤绻瀹珑╃琛 CTID + 濞璁板借娲婀骈杞藉彗婀邈绱㈠兼版娇绋瀹浠彗╃琛 - 4.13)为什么我收到错误信息“ERROR: Memory exhausted in AllocSetAlloc()”? - - 这很可能是系统的虚拟内存用光了,或者内核对某些资源有较低的限制值。在启 - 动 postmaster 之前试试下面的命令: - ulimit -d 262144 - limit datasize 256m + 4.13) 涓轰讳规娑灏殍淇℃ERROR: Memory exhausted in AllocSetAlloc()怙 + + 杩寰瀵杞姣绯荤荤桄邋绋邃猴兼桢 稿驿鸿垫烘杈浣玳宥寮沐ㄥ + postmaster 涔彖搁㈢褰浠わ + ulimit -d 262144 + limit datasize 256m - 取决于你用的 - shell,上面命令只有一条能成功,但是它将把你的进程数据段限制设得比较高 - - 因而也许能让查询完成。这条命令应用于当前进程,以及所有在这条命令运行后 - 创建的子进程。 - 如果你是在运行SQL客户端时因为后台返回了太多的数据而出现问题,请在运行 - 突Ф酥爸葱猩鲜雒睢 + 邋充轰 绋 + shell锛涓棰褰浠ゅ涓妗杞驽锛浣姣瀹灏驿 玷跨ㄦ版殄惰寰姣杈楂锛 + 桎硅杞璁╂ヨ瀹驺杩妗褰浠ゅ虹ㄤ哄藉杩绋锛浠ュ骀濞杩妗褰浠よ胯″邋 + 缓珏杩绋 + 濡驿 姣濞杩琛SQL瀹㈡风娑 涓哄灏杩邃哄お澶珂版搴绨楫棰锛璇峰ㄨ胯 + 瀹㈡风涔彐ц′歌堪褰浠ゃ - 4.14)我如何才能知道所运行的 PostgreSQL 的版本? - - 从 psql 里,输入 SELECT version();指令。 + 4.14) 驽︿芥杞绁殒杩琛鏟ostgreSQL珑娆锛 + + 浠 psql 轱艰惧 SELECT version();驿护 - 4.15)我如何创建一个缺省值是当前时间的字段? - - 使用 CURRENT_TIMESTAMP: - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); + 4.15) 驽︿藉寤轰镐釜缂虹寮姣褰彐堕寸彐锛 + + 浣跨 CURRENT_TIMESTAMP锛 + CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - 4.16)我怎样进行 outer join (外连接)? - - PostgreSQL 采用标准的 SQL 语法支持外连接。这里是两个例子: - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); + 4.16) 骀 疯胯 outer join 锛澶杩妤锛锛 + + PostgreSQL 殓ㄦ 彗 SQL 璇娉姣驽よ挎ャ杩殒袱涓惧锛 + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - 或是 - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); + 骀 + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); - 这两个等价的查询在 t1.col 和 t2.col 上做连接,并且返回 t1 - 中所有未连接的行(那些在 t2 中没有匹配的行)。 右[外]连接(RIGHT OUTER - JOIN)将返回 t2 中未连接的行。 完全外连接(FULL OUTER JOIN)将返回 t1 - 和 t2 中未连接的行。 关键字 OUTER - 在左[外]连接、右[外]连接和完全[外]连接中是可选的,普通连接被称为内连接 - (INNER JOIN)。 + 杩涓や釜玟环珂ヨ濞 t1.col t2.col 涓彖挎ワ煎苟涓杩 t1 涓 + 骀妾杩妤玷★奸d哄 t2 涓娌℃骞殓琛锛 宄[澶]杩妤锛RIGHT OUTER + JOIN锛灏杩 t2 涓妾杩妤玷° 瀹濞澶杩妤锛FULL OUTER JOIN锛灏杩 t1 t2 + 涓妾杩妤玷° 宄楫 OUTER 濞宸澶]杩妤沐砙澶]杩妤邋╗澶]杩妤涓 + 姣瀵殓锛娈殍挎ヨ绉颁负彖挎ワ糏NNER JOIN锛 - 4.17)如何使用涉及多个数据库的查询? - - 没有办法查询当前数据库之外的数据库。 因为 PostgreSQL - 要加载与数据库相关的系统目录(系统表),因此跨数据库的查询如何执行是不 - 定的。 + 4.17) 濡浣浣跨ㄦ跺澶涓版虹妤璇 + + 娌℃彐虫ヨ褰彐版轰瑰ょ姘娈搴 + 涓篜ostgreSQL瑕 杞戒告版虹稿崇绯荤荤斤肩郴缁琛硷煎 姝 + よ法姘娈搴珂ヨ濡浣妲琛姣涓瀹玢 - 附加增值模块contrib/dblink允许采用函数调用实现跨库查询。当然用户也可以 - 同时连接到不同的数据库执行查询然后在客户端合并结果。 + 殄 澧寮妯″contrib/dblink彖殓ㄥ芥拌扮ㄥ拌法搴妤璇€褰缍绋娣涔瀵浠 + 彐惰挎ュ颁稿珂版烘ц℃ヨ缍邋ㄥ娣绔骞剁绘 - 4.18)如何让函数返回多行或多列? - - 在函数中返回数据记录集的功能是很容易使用的,详情参见: + 4.18) 濡浣璁╁芥拌垮澶琛驽ゅ姘娈锛 + + 濞褰姘涓杩彐版褰殓彖芥惧驿娇绋顼艰驽瑙锛 http://techdocs.postgresql.org/guides/SetReturningFunctions - 4.19)为什么我在使用PL/PgSQL函数存取临时表时会收到错误信息“relation with - OID ##### does not exist”? - - PL/PgSQL会缓存函数的内容,由此带来的一个不好的副作用是若一个 PL/PgSQL - 函数访问了一个临时表,然后该表被删除并重建了,则再次调用该函数将失败, - 因为缓存的函数内容仍然指向旧的临时表。解决的方法是在 PL/PgSQL - 中用EXECUTE 对临时表进行访问。这样会保证查询在执行前总会被重新解析。 + 4.19) 涓轰讳规濞浣跨≒L/PgSQL褰姘邋涓存惰〃娑浼娑灏殍淇℃relation with + OID ##### does not exist怙 + + PL/PgSQL浼缂邋芥扮桄瀹癸肩辨ゅ甫妤玟镐釜涓濂界瀵浣绋姣瑗涓涓 + PL/PgSQL + 褰姘璁块轰镐釜涓存惰〃锛缍彖琛ㄨ 椁骞堕寤轰猴煎彐璋绋璇ュ芥板 + 板け璐ワ 涓虹煎珏芥板瀹逛荤舵彐х涓存惰〃汨В宄珂规虫 PL/PgSQL + 涓绋EXECUTE + 瀵逛复娑琛ㄨ胯¤楫汨挎 蜂间胯ヨ濞妲琛彐讳艰殒拌В驺 - 4.27)目前有哪些数据复制方案可用? - - “复制”只是一个术语,有好几种复制技术可使用,每种都有优点和缺点: + 4.20) 绠彐濯浜姘娈澶宥婀妗瀵绋锛 + + 忮ゅ垛濯姣涓涓兼濂藉 绉澶宥骀兼ч芥浼绻彗己绻锛 - 主/从复制方式是允许一个主服务器接受读/写的申请,而多个从服务器只能接受 - 读/SELECT查询的申请, 目前最流行且是免费的主/从 PostgreSQL复制方案是 - Slony-I 。 + 涓/浠澶宥婀寮姣彖涓涓富驽″ㄦュ璇/彗绯璇凤艰澶涓绘濉濞濯杞妤彖 + /SELECT妤璇㈢绯璇凤 绠彐娴琛涓彖垂玟富/浠PostgreSQL澶宥婀妗姣 + Slony-I - 多个主服务器的复制方式允许将读/写的申请发送给多台的计算机,这种方式由 - 谛枰诙嗵ǚ衿髦渫绞荼涠 - 可能会带来较严重的性能损失,Pgcluster是目前这种方案 - 中最好的,而且还可以免费下载。 + 澶涓富驽″ㄧ澶宥婀寮彖灏璇/彗绯璇峰殓诲ゅ扮璁$猴艰跨ф瑰肩变洪 + 瑕濞澶灏驽″ㄤ归村妤姘娈邋 + 瀵杞浼甯︽ヨ句弗殓妲杞驽け锛Pgcluster姣绠彖跨ф规 涓 + 驽ソ顼艰涓杩瀵浠ュ璐逛歌浇 - 也有一些商业需付费和基于硬件的数据复制方案,支持上述各种复制模型。 + 涔驿镐哄涓殇昏垂邋轰虹‖浠剁姘娈澶宥婀妗锛姣驿歌堪彗уゅ舵ā邈 + + 4.21) 涓轰芥ヨ缁骀剧ず玷〃彐邋涓骁妤璇㈣ヤ哥涓屣间负浣澶у缍驿歌戒跨锛 + + 驽父瑙珏 姣濞邋缓琛ㄦ跺琛ㄥ骀邃娇绋浜邋煎封怙煎戒娇绋浜邋煎峰锛琛 + ㄥ驽屣肩О涓烘 璇绗︼煎濞娑姣搴 澶у板顼 + 杩骅扮浣 濞妤璇㈡惰〃彐邋涔搴浣跨ㄥ寮宸锛涓浜宸ュ疯蒋浠讹煎pgAdmin浼濞 + 邋哄寤鸿〃珂浠ゆ惰ㄥ板ㄦ釜 璇绗︿稿 邋煎枫 姝 + わ间负浜 璇绗︾缁涓锛浣 搴璇ワ + * 濞邋缓琛ㄦ堕垮灏 璇绗︿娇绋邋煎峰艰捣妤 + * 濞 璇绗︿稿娇绋灏邋姣 + * 锛涓轰轰稿凡邋ㄧ 璇绗︾稿锛濞妤璇镐娇绋邋煎峰版 璇绗﹀艰捣妤 diff --git a/doc/src/FAQ/FAQ_chinese.html b/doc/src/FAQ/FAQ_chinese.html index d089d69eab..5198cbf129 100644 --- a/doc/src/FAQ/FAQ_chinese.html +++ b/doc/src/FAQ/FAQ_chinese.html @@ -1,875 +1,1006 @@ - - - - - PostgreSQL: PostgreSQL 常见问题(FAQ) - - - - - - -

PostgreSQL 常见问题(FAQ)

-

-最近更新:2005 年 06 月 02 日 星期五 22:27:35 CST -

-

- 目前维护人员:Bruce Momjian (pgman@candle.pha.pa.us)
- 中文版维护人员:doudou586 (doudou586_2005@yahoo.com.cn) -

-

- 本文档的最新版本可以在 - http://www.postgresql.org/files/documentation/faqs/FAQ.html查看。 -

-

- 与操作系统平台相关的问题在http://www.postgresql.org/docs/faq/里回答。
-

-
- -

常见问题

- -

-1.1)PostgreSQL 是什么?该怎么发音?
-1.2)PostgreSQL 的版权是什么?
-1.3)PostgreSQL 可以运行在哪些操作系统平台上?
-1.4)我从哪里能得到 PostgreSQL?
-1.5)我从哪里能得到对 PostgreSQL 的支持?
-1.6)我如何提交一个BUG报告?
-1.7)最新版的PostgreSQL 是什么?
-1.8)能够获取的最新文档有哪些?
-1.9)我如何了解已知的 BUG 或暂缺的功能?
-1.10)我应该怎样学习 SQL ?
-1.11)我应该怎样加入开发队伍?
-1.12)PostgreSQL 和其他数据库系统比起来如何?
-1.13)谁控制和管理PostgreSQL ? -

- -

用户客户端问题

-

-2.1)我们可以用什么语言和 PostgreSQL 打交道?
-2.2)有什么工具可以把 PostgreSQL 用于 Web 页面?
-2.3)PostgreSQL 拥有图形用户界面吗?
-

- -

系统管理问题

-

-3.1)我怎样才能把 PostgreSQL 装在 /usr/local/pgsql 以外的地方?
-3.2)我如何控制来自其他主机的连接?
-3.3)我怎样调整数据库引擎以获得更好的性能?
-3.4)PostgreSQL 里可以获得什么样的调试特性?
-3.5)为什么在试图连接登录时收到“Sorry, too many clients” 消息?
-3.6)为什么要在升级 PostgreSQL 主要发布版本时做 dump 和 restore ?
-3.7)(使用PostgreSQL)我需要使用什么计算机硬件 ?
-

- -

操作问题

-

-4.1)如何只选择一个查询结果的头几行?或是随机的一行?
-4.2)如何查看表、索引、数据库以及用户的定义?如何查看psql里用到的查询指令并显示它们?
-4.3)如何更改一个字段的数据类型?
-4.4)一行记录,一个表,一个库的最大尺寸是多少?
-4.5)存储一个典型的文本文件里的数据需要多少磁盘空间?
-4.6)为什么我的查询很慢?为什么这些查询没有利用索引?
-4.7)我如何才能看到查询优化器是怎样评估处理我的查询的?
-4.8)我怎样做正则表达式搜索和大小写无关的正则表达式查找?怎样利用索引进行大小写无关查找?
-4.9)在一个查询里,我怎样检测一个字段是否为 NULL?我如何才能准确排序而不论某字段是否含NULL值?
-4.10)各种字符类型之间有什么不同?
-4.11.1)我怎样创建一个序列号/自动递增的字段?
-4.11.2)我如何获得一个插入的序列号的值?
-4.11.3)使用 currval() 会导致和其他用户的紊乱情况(race condition)吗?
-4.11.4)为什么不在事务异常中止后重用序列号呢?为什么在序列号字段的取值中存在间断呢?
-4.12)什么是 OID?什么是 CTID ?
-4.13)为什么我收到错误信息“ERROR: Memory exhausted in AllocSetAlloc()”?
-4.14)我如何才能知道所运行的 PostgreSQL 的版本?
-4.15)我如何创建一个缺省值是当前时间的字段?
-4.16)如何进行 outer join (外连接)?
-4.17)如何使用涉及多个数据库的查询?
-4.18)如何让函数返回多行或多列?
-4.19)为什么我在使用PL/PgSQL函数存取临时表时会收到错误信息“relation with OID ##### does not exist”?
-4.20)目前有哪些数据复制方案可用?
-

- -
- -

常见问题

- -

1.1)PostgreSQL 是什么?该怎么发音?

-

-PostgreSQL 读作 Post-Gres-Q-L,有时候也简称为Postgres 。 -

-

- PostgreSQL 是面向目标的关系数据库系统,它具有传统商业数据库系统的所有功能,同时又含有将在下一代 DBMS 系统的使用的增强特性。 - PostgreSQL 是自由免费的,并且所有源代码都可以获得。 -

- -

- PostgreSQL 的开发队伍主要为志愿者,他们遍布世界各地并通过互联网进行联系,这是一个社区开发项目,它不被任何公司控制。 - 如想加入开发队伍,请参见开发人员常见问题(FAQ) - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html -

- - -

1.2)PostgreSQL 的版权是什么?

-

-PostgreSQL的发布遵从经典的BSD版权。关于源代码的如何使用没有任何限制,我们很喜欢这种方式并且还没有打算改变它。 -

-

-下面就是我们使用的BSD版权内容: -

- -

- 部分版权(c)1996-2005,PostgreSQL 全球开发小组,部分版权(c)1994-1996 加州大学董事 -

- -

- (Portions copyright (c) 1996-2005, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 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 MAINTENANCE, - SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.)
- -

- -

1.3)PostgreSQL 可以运行在哪些操作系统平台上?

- -

- 一般说来,一个现代的 UNIX 兼容的平台都能运行 PostgreSQL 。在安装指南里列出了发布时经过明确测试的平台。 -

- -

- PostgreSQl也可以直接运行在基于微软Windows-NT的操作系统,如Win2000,WinXP 和 Win2003,已制作完成的安装包可从 - http://pgfoundry.org/projects/pginstaller下载,基于MSDOS的Windows操作系统 - (Win95,Win98,WinMe)需要通过Cygwin模拟环境运行PostgreSQL。 -

- -

- 同时也有一个为Novell Netware 6开发的版本可从 http://forge.novell.com 获取,为OS/2开发的版本可从 - - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F -

- -

1.4)我从哪里能得到 PostgreSQL?

- -

- 通过浏览器可从http://www.postgresql.org/ftp/下载,也可通过FTP,从 - ftp://ftp.PostgreSQL.org/pub/站点下载。 -

- - -

1.5)我从哪里能得到对 PostgreSQL 的支持?

-

- PostgreSQL社区通过邮件列表为其大多数用户提供帮助,加入邮件列表的主站点是 http://www.postgresql.org/community/lists/,一般情况下,先加入GeneralBug邮件列表是一个较好的开始。 -

- -

- 主要的IRC频道是在FreeNode(irc.freenode.net)的#postgresql,为了连上此频道,可以使用UNIX程序irc,其指令格式: - irc -c '#postgresql' "$USER" irc.freenode.net ,或者使用其他IRC客户端程序。在此网络中还存在一个PostgreSQL的西班牙频道(#postgersql-es)和法语频道 - (#postgresql-fr)。同样地,在EFNET上也有一个PostgreSQL的交流频道。 -

- -

- 商业支持公司的列表在 http://techdocs.postgresql.org/companies.php。 -

- - - -

1.6)我如何提交一个BUG报告?

-

- 可访问 http://www.postgresql.org/support/submitbug,填写Bug上报表格即可。 -

- -

- 同样也可访问ftp站点ftp://ftp.PostgreSQL.org/pub/ 检查有无更新的PostgreSQL版本或补丁。 -

- - - -

1.7)最新版的PostgreSQL 是什么?

-

- PostgreSQL 最新的版本是版本 8.0.2 (译注:现最新版本为8.0.3)。 -

- -

- 我们计划每年发布一个主要版本,每几个月发布一个小版本。 -

- - -

1.8)能够获取的最新文档有哪些?

- -

- PostgreSQL包含大量的文档,主要有一些手册,手册页和一些的测试例子。参见 /doc 目录(译注:应为 $PGHOME/doc)。 - 你还可以在线浏览 PostgreSQL 的手册,其地址是:http://www.PostgreSQL.org/docs。 -

-

- 有两本关于 PostgreSQL 的书在线提供,在 - http://www.PostgreSQL.org/docs/awbook.html - 和 http://www.commandprompt.com/ppbook/ 。 - 也有大量的PostgreSQL书籍可供购买,其中最为流行的一本是由Korry Douglas编写的。在 - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php上 - 上有大量有关PostgreSQL书籍的简介。 - 在 http://techdocs.PostgreSQL.org/上收集了有关 PostgreSQL 的大量技术文章。 -

- -

- 客户端的命令行程序psql有一些以 \d 开头的命令,可显示关于类型,操作符,函数,汇总等的信息,使用 \? 可以显示所有可用的命令。 -

- -

- 我们的 web 站点包含更多的文档。 -

- -

1.9)我如何了解已知的 BUG 或暂缺的功能?

-

- PostgreSQL 支持一个扩展了的 SQL-92 的子集。参阅我们的TODO 列表,获取一个已知Bug,暂缺的功能和将来的计划。 -

- - -

1.10)我应该怎样学习 SQL ?

-

- 首先考虑上述提到的与PostgreSQL相关的书籍,另外一本是Teach Yourself SQL in 21 Days, Second Edition, - 我们的许多用户喜欢The Practical SQL Handbook Bowman, Judith S., et al., Addison-Wesley,其他的则喜欢 - The Complete Reference SQL, Groff et al., McGraw-Hill。 -

- - -

1.11)我应该怎样加入开发队伍?

-

- 详见 Developer's FAQ 。 -

- - -

1.12)PostgreSQL 和其他数据库系统比起来如何?

-

-评价软件有好几种方法:特性,性能,可靠性,支持和价格。 -

-
-
特性
-
- PostgreSQL 拥有大型商用 DBMS 里大多数特性, - 例如:事务,子查询,触发器,视图,外键参考完整性和复杂的锁等。 - 我们还有一些它们没有的特性,如用户定义类型,继承,规则和多版本并行控制以减少锁的争用等。
-
- -
性能
-
- PostgreSQL 和其他商用和开源的数据库具有类似的性能。 - 对某些处理它比较快,对其他一些处理它比较慢。 - 与其他数据库相比,我们的性能通常在 +/- 10%之间。
-
- -
可靠性
-
- 我们知道 DBMS 必须是可靠的,否则它就一点用都没有。 - 我们努力做到发布经过认真测试的,稳定的臭虫最少的代码。每个版本至少有一个月的 beta - 测试时间,并且我们的发布历史显示我们可以提供稳定的,牢固的,可用于生产使用的版本。我们相信 - 在这方面我们与其他的数据库软件是相当的。
-
- -
支持
-
- 我们的邮件列表提供一个非常大的开发人员和用户的组以帮助解决所碰到的任何问题。 - 我们不能保证肯定能解决问题,相比之下,商用 DBMS 也并不是总能够提供解决方法。 - 直接与开发人员,用户群,手册和源程序接触令 PostgreSQL 的支持比其他 DBMS - 还要好。还有一些商业性的预包装的支持,可以给提供给那些需要的人。(参阅 FAQ 条款 1.5 小节)
-
- -
价格
-
- 我们对任何用途都免费,包括商用和非商用目的。 - 你可以不加限制地向你的产品里加入我们的代码,除了那些我们在上面的版权声明里声明的 BSD 风格的版权外。 -
- -
- - -

1.13)谁控制PostgreSQL ?

-

- 如果你在寻找PostgreSQL的掌门人,或是什么中央委员会,或是什么所属公司,你只能放弃了---因为一个也不存在,但我们的确有一个 - 委员会和CVS管理组,但这些工作组的设立主要是为了进行管理工作而不是对PostgreSQL进行控制,PostgreSQL项目是由任何人均 - 可参加的开发人员社区和所有用户控制的,你所需要做的就是加入邮件列表,参与讨论即可(要参与PostgreSQL的开发详见 - Developer's FAQ 获取信息)。 -

- -
- - -

用户客户端问题

- -

2.1)我们可以用什么语言和 PostgreSQL 打交道?

-

- PostgreSQL(缺省情况)只安装有C和内嵌式C的接口,其他的接口都是独立的项目,能够分别下载,这些接口项目独立的好处 - 是他们可以有各自的发布计划和各自独立的开发组。 -

-

- 一些编程语言如PHP都有访问 PostgreSQL 的接口,Perl,TCL,Python以及很多其他语言的接口在 - http://gborg.postgresql.org 上的Drivers/Interfaces小节可找到, - 并且通过Internet很容易搜索到。 -

- - - -

2.2)有什么工具可以把 PostgreSQL 用于 Web 页面?

-

- 一个介绍以数据库为后台的挺不错的站点是:http://www.webreview.com。 -

-

- 对于 Web 集成,PHP 是一个极好的接口。它在:http://www.php.net/。 -

-

- 对于复杂的任务,很多人采用 Perl 接口和 CGI.pm 或 mod_perl 。 -

- - -

2.3)PostgreSQL 拥有图形用户界面吗?

-

- 是的,在 http://techdocs.postgresql.org/guides/GUITools有一个详细的列表。 -

- - - -
- -

系统管理问题

- -

3.1)我怎样能把 PostgreSQL 装在 /usr/local/pgsql 以外的地方?

-

- 在运行 configure 时加上 --prefix 选项。 -

- - -

3.2)我如何控制来自其他主机的连接?

-

- 缺省时,PostgreSQL 只允许通过 unix 域套接字或TCP/IP方式且来自本机的连接。 - 你只有在修改了配置文件postgresql.conf中的listen_addresses,且也在配置文件pg_hba.conf中打开了 - 主机为基础( host-based )的身份认证,并重新启动PostgreSQL,否则其他机器是不能与你的PostgreSQL服务器连接的。 -

- - -

3.3)我怎样调整数据库引擎以获得更好的性能?

-

- 有三个主要方面可以提升PostgreSQL的潜能。 -

- -
-
查询方式的变化
-
- 这主要涉及修改查询方式以获取更好的性能: -
    -
  • 创建索引,包括表达式和部分索引;
  • -
  • 使用COPY语句代替多个Insert语句;
  • -
  • 将多个SQL语句组成一个事务以减少提交事务的开销;
  • -
  • 从一个索引中提取多条记录时使用CLUSTER;
  • -
  • 从一个查询结果中取出部分记录时使用LIMIT;
  • -
  • 使用预编译式查询(Prepared Query);
  • -
  • 使用ANALYZE以保持精确的优化统计;
  • -
  • 定期使用 VACUUM 或 pg_autovacuum
  • -
  • 进行大量数据更改时先删除索引(然后重建索引)
  • -
-
- -
服务器的配置
-
- 配置文件postgres.conf中的很多设置都会影响性能,所有参数的列表可见: - Administration Guide/Server Run-time Environment/Run-time Configuration, - 有关参数的解释可见: - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html 和 - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html。 -
- -
硬件的选择
-
- 计算机硬件对性能的影响可浏览 - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html 和 - http://www.powerpostgresql.com/PerfList/。 -
- -
- - -

3.4)PostgreSQL 里可以获得什么样的调试特性?

-

- PostgreSQL 有很多类似 log_* 的服务器配置变量可用于查询的打印和进程统计,而这些工作对调试和性能测试很有帮助。 -

- - - -

3.5)为什么在试图连接时收到“Sorry, too many clients”消息?

-

- 这表示你已达到缺省100个并发后台进程数的限制,你需要通过修改postgresql.conf文件中的max_connections值来 - 增加postmaster的后台并发处理数,修改后需重新启动postmaster。 -

- - -

3.6)为什么要在升级 PostgreSQL 主要发布版本时做 dump 和 restore ?

-

- PostgreSQL 开发组对每次小的升级仅做了较少的修改,因此从 7.4.0 升级到 7.4.1 不需要 dump 和 restore。 - 但是主要的升级(例如从 7.3 到 7.4)通常会修改系统表和数据表的内部格式。 - 这些变化一般比较复杂,因此我们不维数据文件的向后兼容。 - dump 将数据按照通用的格式输出,随后可以被重新加载并使用新的内部格式。 -

- -

3.7)(使用PostgreSQL)我需要使用什么计算机硬件 ?

-

- 由于计算机硬件大多数是兼容的,人们总是倾向于相信所有计算机硬件质量也是相同的。事实上不是, - ECC RAM(带奇偶校验的内存),SCSI (硬盘)和优质的主板比一些便宜货要更加可靠且具有更好的性能。PostgreSQL几乎可以运行在任何硬件上, - 但如果可靠性和性能对你的系统很重要,你就需要全面的研究一下你的硬件配置了。在我们的邮件列表上也有关于 - 硬件配置和性价比的讨论。 -

- - -
- -

操作问题

- - -

4.1)如何只选择一个查询结果的头几行?或是随机的一行?

-

- 如果你只是要提取几行数据,并且你在执行查询中知道确切的行数,你可以使用LIMIT功能。 - 如果有一个索引与 ORDER BY中的条件匹配,PostgreSQL 可能就只处理要求的头几条记录, - (否则将对整个查询进行处理直到生成需要的行)。如果在执行查询功能时不知道确切的记录数, - 可使用游标(cursor)和FETCH功能。 -

-

- 可使用以下方法提取一行随机记录的: -

-
-		SELECT  cols
-		FROM tab
-		ORDER BY random()
-		LIMIT 1 ;
-
- - - -

4.2)如何查看表、索引、数据库以及用户的定义?如何查看psql里用到的查询指令并显示它们?

-

- 在psql中使用 \dt 命令来显示数据表的定义,要了解psql中的完整命令列表可使用\? ,另外,你也可以阅读 psql 的源代码 - 文件pgsql/src/bin/psql/describe.c,它包括为生成psql反斜杠命令的输出的所有 SQL 命令。你还可以带 -E 选项启动 psql, - 这样它将打印出执行你在psql中所给出的命令的内部实际使用的SQL查询。PostgreSQL也提供了一个兼容SQL的INFORMATION SCHEMA接口, - 你可以从这里获取关于数据库的信息。 -

-

- 在系统中有一些以pg_ 打头的系统表也描述了表的定义。 -

-

- 使用 psql -l 指令可以列出所有的数据库。 -

-

- 也可以浏览一下 pgsql/src/tutorial/syscat.source文件,它列举了很多可从数据库系统表中获取信息的SELECT语法。 -

- - -

4.3)如何更改一个字段的数据类型?

-

- 在8.0版本里更改一个字段的数据类型很容易,可使用 ALTER TABLE ALTER COLUMN TYPE 。 -

-

- 在以前的版本中,可以这样做: -

-
-	BEGIN;
-    ALTER TABLE tab ADD COLUMN new_col new_data_type;
-    UPDATE tab SET new_col = CAST(old_col AS new_data_type);
-    ALTER TABLE tab DROP COLUMN old_col;
-    COMMIT;
-
-

- 你然后可以使用VACUUM FULL tab 指令来使系统收回无效数据所占用的空间。 -

- -

4.4)一行记录,一个表,一个库的最大尺寸是多少?

-

- 下面是一些限制: -

-
-
- - - - - - - - - -
一个数据库最大尺寸?无限制(已存在有 32TB 的数据库)
一个表的最大尺寸?32 TB
一行记录的最大尺寸?1.6 TB
一个字段的最大尺寸?1 GB
一个表里最大行数?无限制
一个表里最大列数?250-1600 (与列类型有关)
一个表里的最大索引数量?无限制
- - -

- 当然,实际上没有真正的无限制,还是要受可用磁盘空间、可用内存/交换区的制约。 - 事实上,当这些数值变得异常地大时,系统性能也会受很大影响。 -

- -

- 表的最大尺寸 32 TB 不需要操作系统对大文件的支持。大表用多个 1 GB 的文件存储,因此文件系统尺寸的限制是不重要的。 -

-

- 如果缺省的块大小增长到 32K ,最大的表尺寸和最大列数还可以增加到四倍。 -

- - -

4.5)存储一个典型的文本文件里的数据需要多少磁盘空间?

-

- 一个 Postgres 数据库(存储一个文本文件)所占用的空间最多可能需要相当于这个文本文件自身大小5倍的磁盘空间。 -

-

- 例如,假设有一个 100,000 行的文件,每行有一个整数和一个文本描述。 - 假设文本串的平均长度为20字节。文本文件占用 2.8 MB。存放这些数据的 PostgreSQL 数据库文件大约是 6.4 MB: -

-
-     32 字节: 每行的头(估计值)
-     24 字节: 一个整数型字段和一个文本型字段
-   +  4 字节: 页面内指向元组的指针
-   ----------------------------------------
-     60 字节每行
-
-   PostgreSQL 数据页的大小是 8192 字节 (8 KB),则:
-
-   8192 字节每页
-   -------------------   =  136 行/数据页(向下取整)
-     60 字节每行
-
-   100000 数据行
-   --------------------  =  735 数据页(向上取整)
-      128 行每页
-
-   735 数据页 * 8192 字节/页  =  6,021,120 字节(6 MB)
-
- -

- 索引不需要这么多的额外消耗,但也确实包括被索引的数据,因此它们也可能很大。 -

-

- 空值NULL存放在位图中,因此占用很少的空间。 -

- -

4.6)为什么我的查询很慢?为什么这些查询没有利用索引?

-

- 并非每个查询都会自动使用索引。只有在表的大小超过一个最小值,并且查询只会选中表中较小比例的记录时才会采用索引。 - 这是因为索引扫描引起的随即磁盘存取可能比直接地读取表(顺序扫描)更慢。 -

-

- 为了判断是否使用索引,PostgreSQL必须获得有关表的统计值。这些统计值可以使用 VACUUM ANALYZE,或 ANALYZE 获得。 - 使用统计值,优化器知道表中有多少行,就能够更好地判断是否利用索引。 - 统计值对确定优化的连接顺序和连接方法也很有用。在表的内容发生变化时,应定期进行统计值的更新收集。 -

-

- 索引通常不用于 ORDER BY 或执行连接。对一个大表的一次顺序扫描,再做一个显式的排序通常比索引扫描要快。 -

- -

- 但是,在 LIMIT 和 ORDER BY 结合使用时经常会使用索引,因为这只会返回表的一小部分。 - 实际上,虽然 MAX() 和 MIN() 并不使用索引,通过对 - ORDER BY 和 LLIMIT 使用索引取得最大值和最小值也是可以的: -

-
-	SELECT col
-	FROM tab
-	ORDER BY col [ DESC ]
-	LIMIT 1;
-
-

- 如果你确信PostgreSQL的优化器使用顺序扫描是不正确的,你可以使用SET enable_seqscan TO 'off'指令, - 然后再次运行查询,你就可以看出使用一个索引扫描是否确实要快一些。 -

- -

- 当使用通配符操作,例如 LIKE~ 时,索引只能在特定的情况下使用: -

- -

- 在8.0之前的版本中,除非要查询的数据类型和索引的数据类型相匹配,否则索引经常是未被用到,特别是对int2,int8和数值型的索引。 -

- -

4.7)我如何才能看到查询优化器是怎样评估处理我的查询?

-

- 参考 EXPLAIN 手册页。 -

- -

4.8)我怎样做正则表达式搜索和大小写无关的正则表达式查找?怎样利用索引进行大小写无关查找?

-

- 操作符 ~ 处理正则表达式匹配,而 ~* 处理大小写无关的正则表达式匹配。大写些无关的 LIKE 变种成为 ILIKE。 -

-

- 大小写无关的等式比较通常写做: -

-
    SELECT *
-    FROM tab
-    WHERE lower(col) = 'abc';
-
-

- 这样将不会使用标准的索引。但是可以创建一个可被利用的函数索引: -

-
    CREATE INDEX tabindex ON tab (lower(col));
-
- -

4.9)在一个查询里,我怎样检测一个字段是否为 NULL ?我如何才能准确排序而不论某字段是否含 NULL 值?

-

- 用 IS NULLIS NOT NULL 测试这个字段,具体方法如下: -

-
   SELECT *
-   FROM tab
-   WHERE col IS NULL;
-
- -

为了能对含 NULL字段排序,可在 ORDER BY 条件中使用 IS NULL和 - IS NOT NULL 修饰符,条件为真 true 将比条件为假false 排在前面,下面的例子就会将含 - NULL 的记录排在结果的上面部分: -

-
   SELECT *
-   FROM tab
-   ORDER BY (col IS NOT NULL)
-
- -

4.10)各种字符类型之间有什么不同?

-
- - - - - - - - - -
类型内部名称说明
VARCHAR(n)varchar指定了最大长度,变长字符串,不足定义长度的部分不补齐
CHAR(n)bpchar定长字符串,实际数据不足定义长度时,以空格补齐
TEXTtext没有特别的上限限制(仅受行的最大长度限制)
BYTEAbytea变长字节序列(使用NULL也是允许的)
"char"char一个字符
-
- -

- 在系统表和在一些错误信息里你将看到内部名称。 -

-

- 上面所列的前四种类型是"varlena"(变长)类型(也就是说,开头的四个字节是长度,后面才是数据)。 - 于是实际占用的空间比声明的大小要多一些。 - 然而这些类型都可以被压缩存储,也可以用 TOAST 脱机存储,因此磁盘空间也可能比预想的要少。 -

-

- VARCHAR(n) 在存储限制了最大长度的变长字符串是最好的。 - TEXT 适用于存储最大可达 1G左右但未定义限制长度的字符串。 -

-

- CHAR(n) 最适合于存储长度相同的字符串。 CHAR(n)会根据所给定的字段长度以空格补足(不足的字段内容), - 而 VARCHAR(n) 只存储所给定的数据内容。 - BYTEA 用于存储二进制数据,尤其是包含 NULL 字节的值。这些类型具有相似的性能特性。 -

- - - -

4.11.1)我怎样创建一个序列号/自动递增的字段?

-

- PostgreSQL 支持 SERIAL 数据类型。它在字段上自动创建一个序列和索引。例如: -

-
-	CREATE TABLE person ( 
-		id   SERIAL, 
-		name TEXT 
-	);
-
-

- 会自动转换为: -

-
-	CREATE SEQUENCE person_id_seq;
-	CREATE TABLE person ( 
-		id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-		name TEXT
-	);
-
-

- 参考 create_sequence 手册页获取关于序列的更多信息。 -

- - -

4.11.2)我如何获得一个插入的序列号的值?

-

- 一种方法是在插入之前先用函数 nextval() 从序列对象里检索出下一个 SERIAL 值,然后再显式插入。使用 - 4.11.1 里的例表,可用伪码这样描述: -

-
-	new_id = execute("SELECT nextval('person_id_seq')");
-	execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
-

- 这样还能在其他查询中使用存放在 new_id 里的新值(例如,作为 person 表的外键)。 - 注意自动创建的 SEQUENCE 对象的名称将会是 <table>_<serialcolumn>_seq, - 这里 table 和 serialcolumn 分别是你的表的名称和你的 SERIAL 字段的名称。 -

-

- 类似的,在 SERIAL 对象缺省插入后你可以用函数 currval() 检索刚赋值的 SERIAL 值,例如: -

-
-	execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
-	new_id = execute("SELECT currval('person_id_seq')");
-
- -

4.11.3)使用 currval() 会导致和其他用户的冲突情况(race condition)吗?

-

- 不会。currval() 返回的是你本次会话进程所赋的值而不是所有用户的当前值。
-

- -

4.11.4)为什么不在事务异常中止后重用序列号呢?为什么在序列号字段的取值中存在间断呢?

-

- 为了提高并发性,序列号在需要的时候赋予正在运行的事务,并且在事务结束之前不进行锁定, - 这就会导致异常中止的事务后,序列号会出现间隔。 -

- -


4.12)什么是 OID ?什么是 CTID

-

- PostgreSQL 里创建的每一行记录都会获得一个唯一的OID,除非在创建表时使用WITHOUT OIDS选项。 - OID创建时会自动生成一个4字节的整数,所有 OID 在整个 PostgreSQL 中均是唯一的。 然而,它在超过40亿时将溢出, - OID此后会出现重复。PostgreSQL 在它的内部系统表里使用 OID 在表之间建立联系。 -

-

- 在用户的数据表中,最好是使用SERIAl来代替OID - 因为SERIAL只是保证在单个表中数据是唯一的,这样它溢出的可能性就非常小了, - SERIAL8可用来保存8字节的序列号字段。 -

- -

- CTID 用于标识带着数据块(地址)和(块内)偏移的特定的物理行。 - CTID 在记录被更改或重载后发生改变。索引入口使用它们指向物理行。 -

- - -

4.13)为什么我收到错误信息“ERROR: Memory exhausted in AllocSetAlloc()”?

-

- 这很可能是系统的虚拟内存用光了,或者内核对某些资源有较低的限制值。在启动 postmaster 之前试试下面的命令: -

-
-	ulimit -d 262144
-	limit datasize 256m
-
-

- 取决于你用的 shell,上面命令只有一条能成功,但是它将把你的进程数据段限制设得比较高, - 因而也许能让查询完成。这条命令应用于当前进程,以及所有在这条命令运行后创建的子进程。 - 如果你是在运行SQL客户端时因为后台返回了太多的数据而出现问题,请在运行客户端之前执行上述命令。 -

- -

4.14)我如何才能知道所运行的 PostgreSQL 的版本?

-

- 从 psql 里,输入 SELECT version();指令。 -

- -

4.15)我如何创建一个缺省值是当前时间的字段?

-

- 使用 CURRENT_TIMESTAMP: -

-
-	CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- - -

4.16)我怎样进行 outer join (外连接)?

-

- PostgreSQL 采用标准的 SQL 语法支持外连接。这里是两个例子: -

-
-	SELECT *
-	FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
-

或是

-
-	SELECT *
-	FROM t1 LEFT OUTER JOIN t2 USING (col);
-
-

- 这两个等价的查询在 t1.col 和 t2.col 上做连接,并且返回 t1 中所有未连接的行(那些在 t2 中没有匹配的行)。 - 右[外]连接(RIGHT OUTER JOIN)将返回 t2 中未连接的行。 - 完全外连接(FULL OUTER JOIN)将返回 t1 和 t2 中未连接的行。 - 关键字 OUTER 在左[外]连接、右[外]连接和完全[外]连接中是可选的,普通连接被称为内连接(INNER JOIN)。 -

- - -

4.17)如何使用涉及多个数据库的查询?

-

- 没有办法查询当前数据库之外的数据库。 - 因为 PostgreSQL 要加载与数据库相关的系统目录(系统表),因此跨数据库的查询如何执行是不定的。 -

-

- 附加增值模块contrib/dblink允许采用函数调用实现跨库查询。当然用户也可以同时连接到不同的数据库执行查询然后在客户端合并结果。 -

- -

4.18)如何让函数返回多行或多列?

-

- 在函数中返回数据记录集的功能是很容易使用的,详情参见: - http://techdocs.postgresql.org/guides/SetReturningFunctions -

- -

4.19)为什么我在使用PL/PgSQL函数存取临时表时会收到错误信息“relation with OID ##### does not exist”?

-

- PL/PgSQL会缓存函数的内容,由此带来的一个不好的副作用是若一个 PL/PgSQL - 函数访问了一个临时表,然后该表被删除并重建了,则再次调用该函数将失败, - 因为缓存的函数内容仍然指向旧的临时表。解决的方法是在 PL/PgSQL 中用EXECUTE - 对临时表进行访问。这样会保证查询在执行前总会被重新解析。 -

- -

4.27)目前有哪些数据复制方案可用?

-

- “复制”只是一个术语,有好几种复制技术可使用,每种都有优点和缺点: -

-

- 主/从复制方式是允许一个主服务器接受读/写的申请,而多个从服务器只能接受读/SELECT查询的申请, - 目前最流行且是免费的主/从 PostgreSQL复制方案是 - Slony-I 。 -

-

- 多个主服务器的复制方式允许将读/写的申请发送给多台的计算机,这种方式由于需要在多台服务器之间同步数据变动 - 可能会带来较严重的性能损失,Pgcluster是目前这种方案 - 中最好的,而且还可以免费下载。 -

-

- 也有一些商业需付费和基于硬件的数据复制方案,支持上述各种复制模型。 -

- - - - - - + + + + + + PostgreSQL 甯歌闂锛團AQ锛 + + + + + + +

PostgreSQL 甯歌闂锛團AQ锛

+ + +

鏈杩戞洿鏂帮細2007 骞 1 鏈 5 鏃 鏄熸湡浜 15:40:20 EST
+ 涓枃鐗堟渶杩戞洿鏂帮細2007 骞 1 鏈 29 鏃 鏄熸湡涓 22:48:04 CST +

+

鐩墠缁存姢浜哄憳锛欱ruce Momjian (pgman@candle.pha.pa.us)
+ 涓枃鐗堢淮鎶や汉鍛橈細Daojing.Zhou锛doudou586@gmail.com锛 +

+ +

+ 鏈枃妗g殑鏈鏂扮増鏈彲浠ュ湪 + http://www.postgresql.org/files/documentation/faqs/FAQ.html鏌ョ湅銆 +

+

+ 涓庢搷浣滅郴缁熷钩鍙扮浉鍏崇殑闂鍙湪http://www.postgresql.org/docs/faq/閲屾壘鍒扮瓟妗堛
+

+
+ +

甯歌闂

+ + +

+1.1)PostgreSQL 鏄粈涔堬紵璇ユ庝箞鍙戦煶锛
+1.2)璋佹帶鍒跺拰绠$悊PostgreSQL 锛
+1.3)PostgreSQL鐨勭増鏉冩槸浠涔堬紵
+1.4)PostgreSQL鍙互杩愯鍦ㄥ摢浜涙搷浣滅郴缁熷钩鍙颁笂锛
+1.5)鎴戜粠鍝噷鑳藉緱鍒癙ostgreSQL锛
+ +1.6)鏈鏂扮増鐨凱ostgreSQL 鏄粈涔堬紵
+1.7)鎴戜粠鍝噷鑳藉緱鍒板PostgreSQL 鐨勬敮鎸侊紵
+1.8)鎴戝浣曟彁浜や竴涓狟UG鎶ュ憡锛
+1.9)鎴戝浣曚簡瑙e凡鐭ョ殑 BUG 鎴栨殏缂虹殑鍔熻兘锛
+1.10)鑳藉鑾峰彇鐨勬渶鏂版枃妗f湁鍝簺锛
+1.11)鎴戝簲璇ユ庢牱瀛︿範 SQL 锛
+ +1.12)濡備綍鎻愪氦琛ヤ竵鎴栨槸鍔犲叆寮鍙戦槦浼嶏紵
+1.13)PostgreSQL 鍜屽叾浠栨暟鎹簱绯荤粺姣旇捣鏉ュ浣曪紵
+

+ +

鐢ㄦ埛瀹㈡埛绔棶棰

+

+2.1)鎴戜滑鍙互鐢ㄤ粈涔堣瑷鍜孭ostgreSQL 鎵撲氦閬擄紵
+2.2)鏈変粈涔堝伐鍏峰彲浠ユ妸PostgreSQL 鐢ㄤ簬 Web 椤甸潰锛
+ +2.3)PostgreSQL 鎷ユ湁鍥惧舰鐢ㄦ埛鐣岄潰鍚楋紵
+

+ +

绯荤粺绠$悊闂

+

+3.1)鎴戞庢牱鎵嶈兘鎶奝ostgreSQL 瑁呭湪 /usr/local/pgsql 浠ュ鐨勫湴鏂癸紵
+3.2)鎴戝浣曟帶鍒舵潵鑷叾浠栫數鑴戠殑杩炴帴锛
+3.3)鎴戞庢牱璋冩暣鏁版嵁搴撴湇鍔″櫒浠ヨ幏寰楁洿濂界殑鎬ц兘锛
+ +3.4)PostgreSQL 閲屽彲浠ヨ幏寰椾粈涔堟牱鐨勮皟璇曠壒鎬э紵
+3.5)涓轰粈涔堝湪璇曞浘杩炴帴鐧诲綍鏃舵敹鍒扳淪orry, too many clients鈥 娑堟伅锛
+3.6)PostgreSQL鐨勫崌绾ц繃绋嬫湁鍝簺鍐呭锛
+3.7)(浣跨敤PostgreSQL)鎴戦渶瑕佷娇鐢ㄤ粈涔堣绠楁満纭欢 锛
+

+ +

鎿嶄綔闂

+ +

+4.1) 濡備綍鍙夋嫨涓涓煡璇㈢粨鏋滅殑澶村嚑琛岋紵鎴栨槸闅忔満鐨勪竴琛岋紵
+4.2) 濡備綍鏌ョ湅琛ㄣ佺储寮曘佹暟鎹簱浠ュ強鐢ㄦ埛鐨勫畾涔夛紵濡備綍鏌ョ湅psql閲岀敤鍒扮殑鏌ヨ鎸囦护骞舵樉绀哄畠浠紵
+4.3) 濡備綍鏇存敼涓涓瓧娈电殑鏁版嵁绫诲瀷锛
+4.4) 鍗曟潯璁板綍锛屽崟涓〃锛屼竴涓暟鎹簱鐨勬渶澶ч檺鍒舵槸澶氬皯锛
+4.5) 瀛樺偍涓涓吀鍨嬬殑鏂囨湰鏂囦欢閲岀殑鏁版嵁闇瑕佸灏戠鐩樼┖闂达紵
+ +4.6) 涓轰粈涔堟垜鐨勬煡璇㈠緢鎱紵涓轰粈涔堣繖浜涙煡璇㈡病鏈夊埄鐢ㄧ储寮曪紵
+4.7) 鎴戝浣曟墠鑳界湅鍒版煡璇紭鍖栧櫒鏄庢牱璇勪及澶勭悊鎴戠殑鏌ヨ鐨勶紵
+4.8) 鎴戞庢牱鍋氭鍒欒〃杈惧紡鎼滅储鍜屽ぇ灏忓啓鏃犲叧鐨勬鍒欒〃杈惧紡鏌ユ壘锛熸庢牱鍒╃敤绱㈠紩杩涜澶у皬鍐欐棤鍏虫煡鎵撅紵
+4.9) 鍦ㄤ竴涓煡璇㈤噷锛屾垜鎬庢牱妫娴嬩竴涓瓧娈垫槸鍚︿负 NULL锛熸垜濡備綍鎵嶈兘鍑嗙‘鎺掑簭鑰屼笉璁烘煇瀛楁鏄惁鍚玁ULL鍊硷紵
+4.10) 鍚勭瀛楃绫诲瀷涔嬮棿鏈変粈涔堜笉鍚岋紵
+4.11.1) 鎴戞庢牱鍒涘缓涓涓簭鍒楀彿鍨嬫垨鏄嚜鍔ㄩ掑鐨勫瓧娈碉紵
+ +4.11.2) 鎴戝浣曡幏寰椾竴涓彃鍏ョ殑搴忓垪鍙风殑鍊硷紵
+4.11.3) 鍚屾椂浣跨敤 currval() 浼氬鑷村拰鍏朵粬鐢ㄦ埛鐨勫啿绐佹儏鍐靛悧锛
+4.11.4) 涓轰粈涔堜笉鍦ㄤ簨鍔″紓甯镐腑姝㈠悗閲嶇敤搴忓垪鍙峰憿锛熶负浠涔堝湪搴忓垪鍙峰瓧娈电殑鍙栧间腑瀛樺湪闂存柇鍛紵
+4.12) 浠涔堟槸 OID锛熶粈涔堟槸 CTID 锛
+4.13) 涓轰粈涔堟垜鏀跺埌閿欒淇℃伅鈥ERROR: Memory exhausted in AllocSetAlloc()鈥濓紵
+ +4.14) 鎴戝浣曟墠鑳界煡閬撴墍杩愯鐨 PostgreSQL 鐨勭増鏈紵
+4.15) 鎴戝浣曞垱寤轰竴涓己鐪佸兼槸褰撳墠鏃堕棿鐨勫瓧娈碉紵
+4.16) 濡備綍鎵ц澶栬繛鎺ワ紙outer join锛夋煡璇紵
+4.17) 濡備綍鎵ц娑夊強澶氫釜鏁版嵁搴撶殑鏌ヨ锛
+4.18) 濡備綍璁╁嚱鏁拌繑鍥炲琛屾垨澶氬垪鏁版嵁锛
+4.19) 涓轰粈涔堟垜鍦ㄤ娇鐢≒L/PgSQL鍑芥暟瀛樺彇涓存椂琛ㄦ椂浼氭敹鍒伴敊璇俊鎭渞elation with OID ##### does not exist鈥濓紵
+ +4.20) 鐩墠鏈夊摢浜涙暟鎹鍒舵柟妗堝彲鐢紵
+4.21) 涓轰綍鏌ヨ缁撴灉鏄剧ず鐨勮〃鍚嶆垨鍒楀悕涓庢垜鐨勬煡璇㈣鍙ヤ腑鐨勪笉鍚岋紵涓轰綍澶у啓鐘舵佷笉鑳戒繚鐣欙紵
+

+ +
+ +

甯歌闂

+ +

1.1)PostgreSQL 鏄粈涔堬紵璇ユ庝箞鍙戦煶锛

+ + +

PostgreSQL 璇讳綔 Post-Gres-Q-L锛屾湁鏃跺欎篃绠绉颁负Postgres 銆傛兂鍚竴涓嬪叾鍙戦煶鐨勪汉鍛樺彲浠庤繖閲屼笅杞藉0闊虫枃浠讹細 + MP3 鏍煎紡 銆 +

+ +

PostgreSQL 鏄潰鍚戠洰鏍囩殑鍏崇郴鏁版嵁搴撶郴缁燂紝瀹冨叿鏈変紶缁熷晢涓氭暟鎹簱绯荤粺鐨勬墍鏈夊姛鑳斤紝鍚屾椂鍙堝惈鏈夊皢鍦ㄤ笅涓浠 DBMS 绯荤粺鐨勪娇鐢ㄧ殑澧炲己鐗规с侾ostgreSQL 鏄嚜鐢卞厤璐圭殑锛屽苟涓旀墍鏈夋簮浠g爜閮藉彲浠ヨ幏寰椼 +

+ +

PostgreSQL 鐨勫紑鍙戦槦浼嶄富瑕佷负蹇楁効鑰咃紝浠栦滑閬嶅竷涓栫晫鍚勫湴骞堕氳繃浜掕仈缃戣繘琛岃仈绯伙紝杩欐槸涓涓ぞ鍖哄紑鍙戦」鐩紝瀹冧笉琚换浣曞叕鍙告帶鍒躲 + 濡傛兂鍔犲叆寮鍙戦槦浼嶏紝璇峰弬瑙佸紑鍙戜汉鍛樺父瑙侀棶棰橈紙FAQ锛 + http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html + +

+ +

1.2) 璋佹帶鍒禤ostgreSQL 锛

+

+ 濡傛灉浣犲湪瀵绘壘PostgreSQL鐨勬帉闂ㄤ汉锛屾垨鏄粈涔堜腑澶鍛樹細锛屾垨鏄粈涔堟墍灞炲叕鍙革紝浣犲彧鑳芥斁寮冧簡---鍥犱负涓涓篃涓嶅瓨鍦紝浣嗘垜浠殑纭湁涓涓 + 鏍稿績濮斿憳浼氬拰CVS绠$悊缁勶紝浣嗚繖浜涘伐浣滅粍鐨勮绔嬩富瑕佹槸涓轰簡杩涜绠$悊宸ヤ綔鑰屼笉鏄PostgreSQL杩涜鐙崰寮忔帶鍒讹紝PostgreSQL椤圭洰鏄敱浠讳綍浜哄潎 + 鍙弬鍔犵殑寮鍙戜汉鍛樼ぞ鍖哄拰鎵鏈夌敤鎴锋帶鍒剁殑锛屼綘鎵闇瑕佸仛鐨勫氨鏄闃呴偖浠跺垪琛紝鍙備笌璁ㄨ鍗冲彲锛堣鍙備笌PostgreSQL鐨勫紑鍙戣瑙 + 寮鍙戜汉鍛樺父闂 (Developer's FAQ) 鑾峰彇淇℃伅锛夈 +

+ + +

1.3)PostgreSQL鐨勭増鏉冩槸浠涔?

+ + +

PostgreSQL鐨勫彂甯冮伒浠庣粡鍏哥殑BSD鐗堟潈銆傚畠鍏佽鐢ㄦ埛涓嶉檺鐩殑鍦颁娇鐢≒ostgreSQL锛岀敋鑷充綘鍙互閿鍞甈ostgreSQL鑰屼笉鍚簮浠g爜涔熷彲浠ワ紝鍞竴鐨勯檺鍒跺氨鏄綘涓嶈兘鍥犺蒋浠惰嚜韬棶棰樿屽悜鎴戜滑杩借瘔娉曞緥璐d换锛屽彟澶栧氨鏄姹傛墍鏈夌殑杞欢鎷疯礉涓』鍖呮嫭浠ヤ笅鐗堟潈澹版槑銆備笅闈㈠氨鏄垜浠墍浣跨敤鐨凚SD鐗堟潈澹版槑鍐呭锛

+ +

PostgreSQL鏁版嵁搴撶鐞嗙郴缁

+ +

閮ㄥ垎鐗堟潈锛坈锛1996-2005锛孭ostgreSQL 鍏ㄧ悆寮鍙戝皬缁勶紝閮ㄥ垎鐗堟潈锛坈锛1994-1996 鍔犲窞澶у钁d簨

+ +

锛圥ortions copyright (c) 1996-2005,PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California锛

+ +

+ 鍏佽涓轰换浣曠洰鐨勪娇鐢紝鎷疯礉锛屼慨鏀瑰拰鍒嗗彂杩欎釜杞欢鍜屽畠鐨勬枃妗h屼笉鏀跺彇浠讳綍璐圭敤锛 + 骞朵笖鏃犻』绛剧讲鍥犳鑰屼骇鐢熺殑璇佹槑锛屽墠鎻愭槸涓婇潰鐨勭増鏉冨0鏄庡拰鏈浠ュ強涓嬮潰涓ゆ鏂囧瓧鍑虹幇鍦ㄦ墍鏈夋嫹璐濅腑銆 + +

+ +

+ 锛圥ermission 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.锛 +

+ +

+ 鍦ㄤ换浣曟儏鍐典笅锛屽姞宸炲ぇ瀛﹂兘涓嶆壙鎷呭洜浣跨敤姝よ蒋浠跺強鍏舵枃妗h屽鑷寸殑瀵逛换浣曞綋浜嬩汉鐨勭洿鎺ョ殑锛 + 闂存帴鐨勶紝鐗规畩鐨勶紝闄勫姞鐨勬垨鑰呯浉浼磋岀敓鐨勬崯鍧忥紝鍖呮嫭鍒╃泭鎹熷け鐨勮矗浠伙紝鍗充娇鍔犲窞澶у宸茬粡寤鸿浜嗚繖浜涙崯澶辩殑鍙兘鎬ф椂涔熸槸濡傛銆 +

+ +

+ 锛圛N 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.锛 +

+ + +

+ 鍔犲窞澶у鏄庣‘鏀惧純浠讳綍淇濊瘉锛屽寘鎷絾涓嶅眬闄愪簬鏌愪竴鐗瑰畾鐢ㄩ旂殑鍟嗕笟鍜屽埄鐩婄殑闅愬惈淇濊瘉銆 + 杩欓噷鎻愪緵鐨勮繖浠借蒋浠舵槸鍩轰簬鈥滃綋浣滄槸鈥濈殑鍩虹鐨勶紝鍥犺屽姞宸炲ぇ瀛︽病鏈夎矗浠绘彁渚涚淮鎶わ紝鏀寔锛屾洿鏂帮紝澧炲己鎴栬呬慨鏀圭殑鏈嶅姟銆 +

+ +

+ 锛圱HE 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 MAINTENANCE, + SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.锛
+ +

+ +

1.4)PostgreSQL 鍙互杩愯鍦ㄥ摢浜涙搷浣滅郴缁熷钩鍙颁笂锛

+ +

涓鑸鏉ワ紝浠讳綍鐜板湪瀵 UNIX 鍏煎鐨勬搷浣滅郴缁熶箣涓婇兘鑳借繍琛孭ostgreSQL 銆傚湪瀹夎鎸囧崡閲屽垪鍑轰簡鍙戝竷鏃剁粡杩囨槑纭祴璇曠殑骞冲彴銆

+ + +

PostgreSQl涔熷彲浠ョ洿鎺ヨ繍琛屽湪鍩轰簬寰蒋Windows-NT鐨勬搷浣滅郴缁燂紝濡俉in2000 SP4锛學inXP 鍜 Win2003锛屽凡鍒朵綔瀹屾垚鐨勫畨瑁呭寘鍙粠 + http://pgfoundry.org/projects/pginstaller涓嬭浇锛屽熀浜嶮SDOS鐨刉indows鎿嶄綔绯荤粺 + 锛圵in95锛學in98锛學inMe锛夐渶瑕侀氳繃Cygwin妯℃嫙鐜杩愯PostgreSQL銆 +

+ +

+ 鍚屾椂涔熸湁涓涓负Novell Netware 6寮鍙戠殑鐗堟湰鍙粠 http://forge.novell.com鑾峰彇锛屼负OS/2(eComStation)寮鍙戠殑鐗堟湰鍙粠 + http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F 涓嬭浇銆 + +

+ +

1.5) 鎴戜粠鍝噷鑳藉緱鍒癙ostgreSQL锛

+ +

+ 閫氳繃娴忚鍣ㄥ彲浠http://www.postgresql.org/ftp/涓嬭浇锛屼篃鍙氳繃FTP锛屼粠 + ftp://ftp.PostgreSQL.org/pub/绔欑偣涓嬭浇銆 +

+ +

1.6) 鏈鏂扮増鐨凱ostgreSQL鏄粈涔堬紵

+ + +

PostgreSQL 鏈鏂扮殑鐗堟湰鏄増鏈 8.2.1 銆

+ +

鎴戜滑璁″垝姣忓勾鍙戝竷涓涓富瑕佸崌绾х増鏈紝姣忓嚑涓湀鍙戝竷涓涓皬鐗堟湰銆

+ + +

1.7) 鎴戜粠鍝噷鑳藉緱鍒板PostgreSQL鐨勬敮鎸侊紵

+ +

PostgreSQL绀惧尯閫氳繃閭欢鍒楄〃涓哄叾澶у鏁扮敤鎴锋彁渚涘府鍔╋紝璁㈤槄閭欢鍒楄〃鐨勪富绔欑偣鏄 http://www.postgresql.org/community/lists/锛屼竴鑸儏鍐典笅锛屽厛鍔犲叆GeneralBug閭欢鍒楄〃鏄竴涓緝濂界殑寮濮嬨 +

+ +

+ 涓昏鐨処RC棰戦亾鏄湪FreeNode(irc.freenode.net)鐨#postgresql锛屼负浜嗚繛涓婃棰戦亾锛屽彲浠ヤ娇鐢║NIX绋嬪簭irc锛屽叾鎸囦护鏍煎紡锛 + irc -c '#postgresql' "$USER" irc.freenode.net 锛屾垨鑰呬娇鐢ㄥ叾浠朓RC瀹㈡埛绔▼搴忋傚湪姝ょ綉缁滀腑杩樺瓨鍦ㄤ竴涓狿ostgreSQL鐨勮タ鐝墮棰戦亾(#postgersql-es)鍜屾硶璇閬 + (#postgresql-fr)銆傚悓鏍峰湴锛屽湪EFNET涓婁篃鏈変竴涓狿ostgreSQL鐨勪氦娴侀閬撱 +

+ +

+ 鍙彁渚涘晢涓氭敮鎸佺殑鍏徃鍒楄〃鍙湪http://techdocs.postgresql.org/companies.php娴忚銆 + +

+ + + +

1.8) 鎴戝浣曟彁浜や竴涓狟UG鎶ュ憡锛

+ +

+ 鍙闂 http://www.postgresql.org/support/submitbug锛屽~鍐橞ug涓婃姤琛ㄦ牸鍗冲彲锛屽悓鏍蜂篃鍙闂甪tp绔欑偣ftp://ftp.PostgreSQL.org/pub/ 妫鏌ユ湁鏃犳洿鏂扮殑PostgreSQL鐗堟湰鎴栬ˉ涓併 +

+ + +

+閫氳繃浣跨敤Bug鎻愪氦琛ㄦ牸鎴栨槸鍙戝線PostgreSQL閭欢鍒楄〃鐨凚ug閫氬父浼氭湁浠ヤ笅涔嬩竴鍥炲锛 +

+ + + + +

1.9) 鎴戝浣曚簡瑙e凡鐭ョ殑 BUG 鎴栨殏缂虹殑鍔熻兘锛

+

PostgreSQL 鏀寔涓涓墿灞曠殑 SQL:2003 鐨勫瓙闆嗐傚弬闃呮垜浠殑TODO 鍒楄〃锛屼簡瑙e凡鐭ug鍒楄〃銆佹殏缂虹殑鍔熻兘鍜屽皢鏉ョ殑寮鍙戣鍒掋 + +

+ +

瑕佹眰澧炲姞鏂板姛鑳界殑鐢宠閫氬父浼氭敹鍒颁互涓嬩箣涓鐨勫洖澶嶏細

+ + + +

+PostgreSQL涓嶄娇鐢˙ug璺熻釜绯荤粺锛屽洜涓烘垜浠彂鐜板湪閭欢鍒楄〃涓洿鎺ュ洖澶嶄互鍙婁繚璇乀ODO浠诲姟鍒楄〃鎬绘槸澶勪簬鏈鏂扮姸鎬佺殑鏂瑰紡宸ヤ綔鏁堢巼浼氭洿楂樹竴浜涖備簨瀹炰笂锛孊ug涓嶄細鍦ㄦ垜浠殑杞欢涓瓨鍦ㄥ緢闀挎椂闂达紝 +瀵瑰奖鍝嶅緢澶氱敤鎴风殑Bug涔熸绘槸寰堝揩浼氳淇銆傚敮涓鑳芥壘鍒版墍鏈夋敼杩涖佹彁楂樺拰淇鐨勫湴鏂规槸CVS鐨勬棩蹇椾俊鎭紝鍗充娇鏄湪杞欢鏂扮増鏈殑鍙戝竷淇℃伅涓篃涓嶄細鍒楀嚭姣忎竴澶勭殑杞欢鏇存柊銆 +

+ + + +

1.10) 鑳藉鑾峰彇鐨勬渶鏂版枃妗f湁鍝簺锛

+ + +

PostgreSQL鍖呭惈澶ч噺鐨勬枃妗o紝涓昏鏈夎缁嗙殑鍙傝冩墜鍐岋紝鎵嬪唽椤靛拰涓浜涚殑娴嬭瘯渚嬪瓙銆傚弬瑙 /doc 鐩綍锛堣瘧娉細搴斾负 $PGHOME/doc锛夈 + 浣犺繕鍙互鍦ㄧ嚎娴忚PostgreSQL鐨勬墜鍐岋紝鍏剁綉鍧鏄細http://www.PostgreSQL.org/docs銆 +

+ +

+ 鏈変袱鏈叧浜嶱ostgreSQL鐨勪功鍦ㄧ嚎鎻愪緵锛屽湪 + http://www.PostgreSQL.org/docs/awbook.html + 鍜 http://www.commandprompt.com/ppbook/ 銆 + 涔熸湁澶ч噺鐨凱ostgreSQL涔︾睄鍙緵璐拱锛屽叾涓渶涓烘祦琛岀殑涓鏈槸鐢盞orry Douglas缂栧啓鐨勩傚湪 + http://techdocs.PostgreSQL.org/techdocs/bookreviews.php涓 + 涓婃湁澶ч噺鏈夊叧PostgreSQL涔︾睄鐨勭畝浠嬨 + 鍦 http://techdocs.PostgreSQL.org/涓婃敹闆嗕簡鏈夊叧PostgreSQL鐨勫ぇ閲忔妧鏈枃绔犮 + +

+ +

+ 瀹㈡埛绔殑鍛戒护琛岀▼搴psql鏈変竴浜涗互 \d 寮澶寸殑鍛戒护锛屽彲鏄剧ず鍏充簬绫诲瀷锛屾搷浣滅锛屽嚱鏁帮紝鑱氬悎绛変俊鎭紝浣跨敤 \? 鍙互鏄剧ず鎵鏈夊彲鐢ㄧ殑鍛戒护銆 +

+ +

+ 鎴戜滑鐨 web 绔欑偣鍖呭惈鏇村鐨勬枃妗c +

+ + + +

1.11) 鎴戝簲璇ユ庢牱瀛︿範 SQL 锛

+ +

+ 棣栧厛鑰冭檻涓婅堪鎻愬埌鐨勪笌PostgreSQL鐩稿叧鐨勪功绫嶏紝鍙﹀涓鏈槸Teach Yourself SQL in 21 Days, Second Edition锛屽叾璇︾粏浠嬬粛鐨勭綉鍧鏄 + http://members.tripod.com/er4ebus/sql/index.htm锛 + 鎴戜滑鐨勮澶氱敤鎴峰枩娆The Practical SQL Handbook锛 Bowman, Judith S. 缂栧啓锛孉ddison-Wesley鍏徃鍑虹増锛屽叾浠栫殑鍒欏枩娆 + The Complete Reference SQL, Groff 缂栧啓锛孧cGraw-Hill鍏徃鍑虹増銆 +

+ +

鍦ㄤ笅鍒楃綉鍧涓婁篃鏈夊緢濂界殑鏁欑▼锛屼粬浠槸

+ + + + +

1.12)濡備綍鎻愪氦琛ヤ竵鎴栨槸鍔犲叆寮鍙戦槦浼嶏紵

+

+ 璇﹁ 寮鍙戜汉鍛樺父瑙侀棶棰 (Developer's FAQ) 銆 + +

+ + +

1.13)PostgreSQL鍜屽叾浠栨暟鎹簱绯荤粺姣旇捣鏉ュ浣曪紵

+ +

+璇勪环杞欢鏈夊ソ鍑犵鏂规硶锛氬姛鑳斤紝鎬ц兘锛屽彲闈犳э紝鏀寔鍜屼环鏍笺 +

+ +
+
鍔熻兘
+
PostgreSQL 鎷ユ湁澶у瀷鍟嗙敤鏁版嵁搴撴渶澶氱殑鍔熻兘锛屼緥濡傦細浜嬪姟锛屽瓙鏌ヨ锛岃Е鍙戝櫒锛岃鍥撅紝澶栭敭鍙傝冨畬鏁存у拰澶嶆潅鐨勯攣瀹氱瓑銆 + 鎴戜滑杩樻湁涓浜涘畠浠病鏈夌殑鐗规э紝濡傜敤鎴峰畾涔夌被鍨嬶紝缁ф壙锛岃鍒欏拰澶氱増鏈苟琛屾帶鍒朵互鍑忓皯閿佺殑浜夌敤绛夈
+ +
+ +
鎬ц兘
+
PostgreSQL鍜屽叾浠栧晢鐢ㄥ拰寮婧愮殑鏁版嵁搴撳叿鏈夌被浼肩殑鎬ц兘銆傚鏌愪簺澶勭悊瀹冩瘮杈冨揩锛屽鍏朵粬涓浜涘鐞嗗畠姣旇緝鎱€ + 涓庡叾浠栨暟鎹簱鐩告瘮锛屾垜浠殑鎬ц兘浼樺姡閫氬父鍦 +/- 10%涔嬮棿銆
+
+ +
鍙潬鎬
+
+ + 鎴戜滑閮界煡閬撴暟鎹簱蹇呴』鏄彲闈犵殑锛屽惁鍒欏畠灏变竴鐐圭敤閮芥病鏈夈傛垜浠姫鍔涘仛鍒板彂甯冪粡杩囪鐪熸祴璇曠殑锛岀己闄锋渶灏戠殑绋冲畾浠g爜銆傛瘡涓増鏈嚦灏戞湁涓涓湀鐨 beta + 娴嬭瘯鏃堕棿锛屽苟涓旀垜浠殑鍙戝竷鍘嗗彶鏄剧ず鎴戜滑鍙互鎻愪緵绋冲畾鐨勶紝鐗㈠浐鐨勶紝鍙敤浜庣敓浜т娇鐢ㄧ殑鐗堟湰銆傛垜浠浉淇″湪杩欐柟闈㈡垜浠笌鍏朵粬鐨勬暟鎹簱杞欢鏄浉褰撶殑銆
+
+ +
鏀寔
+
+ 鎴戜滑鐨勯偖浠跺垪琛ㄦ彁渚涗竴涓潪甯稿ぇ鐨勫紑鍙戜汉鍛樺拰鐢ㄦ埛鐨勭粍浠ュ府鍔╄В鍐虫墍纰板埌鐨勪换浣曢棶棰樸傛垜浠笉鑳戒繚璇佹绘槸鑳借В鍐抽棶棰橈紝鐩告瘮涔嬩笅锛屽晢鐢ㄦ暟鎹簱杞欢涔熷苟涓嶆槸鎬昏兘澶熸彁渚涜В鍐虫柟娉曘 + 鐩存帴涓庡紑鍙戜汉鍛橈紝鐢ㄦ埛缇わ紝鎵嬪唽鍜屾簮绋嬪簭鎺ヨЕ浣縋ostgreSQL鐨勬敮鎸佹瘮鍏朵粬鏁版嵁搴撹繕瑕佸ソ銆傝繕鏈変竴浜涘晢涓氭х殑鍏ㄩ潰鎶鏈敮鎸侊紝鍙互缁欐彁渚涚粰閭d簺闇瑕佺殑浜恒傦紙鍙傞槄1.7 灏忚妭锛
+
+ + +
浠锋牸
+
+ 鎴戜滑瀵逛换浣曠敤閫旈兘鍏嶈垂锛屽寘鎷晢鐢ㄥ拰闈炲晢鐢ㄧ洰鐨勩 + 浣犲彲浠ヤ笉鍔犻檺鍒跺湴鍚戜綘鐨勪骇鍝侀噷鍔犲叆鎴戜滑鐨勪唬鐮侊紝闄や簡閭d簺鎴戜滑鍦ㄤ笂闈㈢殑鐗堟潈澹版槑閲屽0鏄庣殑 BSD鐗堟潈涔嬪鐨勫唴瀹广 +
+ +
+ + + +
+ + +

鐢ㄦ埛瀹㈡埛绔棶棰

+ + +

2.1) 鎴戜滑鍙互鐢ㄤ粈涔堣瑷鍜孭ostgreSQL鎵撲氦閬擄紵

+ +

PostgreSQL(缂虹渷鎯呭喌)鍙畨瑁呮湁C鍜屽唴宓屽紡C鐨勬帴鍙o紝鍏朵粬鐨勬帴鍙i兘鏄嫭绔嬬殑椤圭洰锛岃兘澶熷垎鍒笅杞斤紝杩欎簺鎺ュ彛椤圭洰鐙珛鐨勫ソ澶 + 鏄粬浠彲浠ユ湁鍚勮嚜鐨勫彂甯冭鍒掑拰鍚勮嚜鐙珛鐨勫紑鍙戠粍銆 +

+

+ 涓浜涚紪绋嬭瑷濡侾HP閮芥湁璁块棶PostgreSQL鐨勬帴鍙o紝Perl銆乀CL銆丳ython浠ュ強寰堝鍏朵粬璇█鐨勬帴鍙e湪 + http://gborg.postgresql.org缃戠珯涓婄殑Drivers/Interfaces灏忚妭鍙壘鍒帮紝 + 骞朵笖閫氳繃Internet寰堝鏄撴悳绱㈠埌銆 +

+ + + + +

2.2) 鏈変粈涔堝伐鍏峰彲浠ユ妸PostgreSQL鐢ㄤ簬 Web 椤甸潰锛

+

+ 涓涓粙缁嶄互鏁版嵁搴撲负鍚庡彴鐨勬尯涓嶉敊鐨勭珯鐐规槸锛http://www.webreview.com銆 +

+

+ 瀵逛簬 Web 闆嗘垚锛孭HP 鏄竴涓瀬濂界殑鎺ュ彛銆傚畠鍦http://www.php.net/銆 + +

+

+ 瀵逛簬澶嶆潅鐨勪换鍔★紝寰堝浜洪噰鐢 Perl 鎺ュ彛鍜 浣跨敤CGI.pm鐨凞BD::Pg 鎴 mod_perl 銆 +

+ + +

2.3)PostgreSQL鎷ユ湁鍥惧舰鐢ㄦ埛鐣岄潰鍚楋紵

+

+ 鍟嗕笟鐢ㄦ埛鎴栨槸寮婧愬紑鍙戜汉鍛樿兘鎵惧埌寰堝鐨勬湁鍏砅ostgreSQL鐨凣UI鍥惧舰宸ュ叿杞欢锛屽湪 PostgreSQL绀惧尯鏂囨。鏈変竴涓缁嗙殑鍒楄〃銆 +

+ + +
+ + + +

绯荤粺绠$悊闂

+ +

3.1)鎴戞庢牱鑳芥妸PostgreSQL瑁呭湪 /usr/local/pgsql 浠ュ鐨勫湴鏂癸紵

+

+ 鍦ㄨ繍琛 configure 鏃跺姞涓 --prefix 閫夐」銆 +

+ + + +

3.2) 鎴戝浣曟帶鍒舵潵鑷叾浠栫數鑴戠殑杩炴帴锛

+

+ 缂虹渷鎯呭喌涓嬶紝PostgreSQL鍙厑璁告潵鑷湰鏈轰笖閫氳繃 unix 鍩熷鎺ュ瓧鎴朤CP/IP鏂瑰紡鐨勮繛鎺ャ + 浣犲彧鏈夊湪淇敼浜嗛厤缃枃浠postgresql.conf涓殑listen_addresses锛屼笖涔熷湪閰嶇疆鏂囦欢$PGDATA/pg_hba.conf涓墦寮浜 + 鍩轰簬杩滅▼鐢佃剳锛 host-based 锛夌殑韬唤璁よ瘉锛屽苟閲嶆柊鍚姩PostgreSQL锛屽惁鍒欏叾浠栫數鑴戞槸涓嶈兘涓庝綘鐨凱ostgreSQL鏈嶅姟鍣ㄨ繘琛岃繛鎺ョ殑銆 +

+ + +

3.3) 鎴戞庢牱璋冩暣鏁版嵁搴撳紩鎿庝互鑾峰緱鏇村ソ鐨勬ц兘锛

+ + +

+ 鏈変笁涓富瑕佹柟闈㈠彲浠ユ彁鍗嘝ostgreSQL鐨勬綔鑳姐 +

+ +
+
鏌ヨ鏂瑰紡鐨勫彉鍖
+
+ 杩欎富瑕佹秹鍙婁慨鏀规煡璇㈡柟寮忎互鑾峰彇鏇村ソ鐨勬ц兘: +
    +
  • 鍒涘缓绱㈠紩锛屽寘鎷〃杈惧紡鍜岄儴鍒嗙储寮曪紱
  • + +
  • 浣跨敤COPY璇彞浠f浛澶氫釜Insert璇彞锛
  • +
  • 灏嗗涓猄QL璇彞缁勬垚涓涓簨鍔′互鍑忓皯鎻愪氦浜嬪姟鐨勫紑閿锛
  • +
  • 浠庝竴涓储寮曚腑鎻愬彇澶氭潯璁板綍鏃朵娇鐢–LUSTER锛
  • +
  • 浠庝竴涓煡璇㈢粨鏋滀腑鍙栧嚭閮ㄥ垎璁板綍鏃朵娇鐢↙IMIT锛
  • +
  • 浣跨敤棰勭紪璇戝紡鏌ヨ锛圥repared Query)锛
  • +
  • 浣跨敤ANALYZE浠ヤ繚鎸佺簿纭殑浼樺寲缁熻锛
  • + +
  • 瀹氭湡浣跨敤 VACUUM 鎴 pg_autovacuum
  • +
  • 杩涜澶ч噺鏁版嵁鏇存敼鏃跺厛鍒犻櫎绱㈠紩锛堢劧鍚庨噸寤虹储寮曪級
  • +
+
+ +
鏈嶅姟鍣ㄧ殑閰嶇疆
+
+ + 閰嶇疆鏂囦欢postgres.conf涓殑寰堝璁剧疆閮戒細褰卞搷鎬ц兘锛屾墍鏈夊弬鏁扮殑鍒楄〃鍙锛 + 绠$悊鍛樻寚鍗/鏁版嵁搴撴湇鍔″櫒杩愯鐜/鏁版嵁搴撴湇鍔″櫒杩愯閰嶇疆锛 + 鏈夊叧鍙傛暟鐨勮В閲婂彲瑙侊細http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html 鍜 + http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html銆 +
+ +
纭欢鐨勯夋嫨
+ +
+ 璁$畻鏈虹‖浠跺鎬ц兘鐨勫奖鍝嶅彲娴忚 + http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html 鍜 + http://www.powerpostgresql.com/PerfList/銆 +
+ +
+ + +

3.4)PostgreSQL閲屽彲浠ヨ幏寰椾粈涔堟牱鐨勮皟璇曠壒鎬э紵

+ + +

PostgreSQL 鏈夊緢澶氱被浼 log_* 鐨勬湇鍔″櫒閰嶇疆鍙橀噺鍙敤浜庢煡璇㈢殑鎵撳嵃鍜岃繘绋嬬粺璁★紝鑰岃繖浜涘伐浣滃璋冭瘯鍜屾ц兘娴嬭瘯寰堟湁甯姪銆 +

+ + + +

3.5) 涓轰粈涔堝湪璇曞浘杩炴帴鏃舵敹鍒扳淪orry, too many clients锛堝凡鏈夊お澶氱敤鎴疯繛鎺ワ級鈥濇秷鎭紵

+

+ 杩欒〃绀轰綘宸茶揪鍒扮己鐪100涓苟鍙戝悗鍙拌繘绋嬫暟鐨勯檺鍒讹紝浣犻渶瑕侀氳繃淇敼postgresql.conf鏂囦欢涓殑max_connections鍊兼潵 + 澧炲姞postmaster鐨勫悗鍙板苟鍙戝鐞嗘暟锛屼慨鏀瑰悗闇閲嶆柊鍚姩postmaster銆 + +

+ + +

3.6)PostgreSQL鐨勫崌绾ц繃绋嬫湁鍝簺鍐呭 锛

+

+ PostgreSQL 寮鍙戠粍瀵规瘡娆″皬鐗堟湰鐨勫崌绾т富瑕佸彧鍋氫簡涓浜汢ug淇宸ヤ綔锛屽洜姝や粠 7.4.8 鍗囩骇鍒 7.4.9 涓嶉渶瑕 dump 鍜 restore锛屼粎闇瑕佸仠姝㈡暟鎹簱鏈嶅姟鍣紝瀹夎鏇存柊鍚庣殑杞欢鍖咃紝鐒跺悗閲嶅惎鏈嶅姟鍣ㄥ嵆鍙 +

+

+ 鎵鏈塒ostgreSQL鐨勭敤鎴峰簲璇ュ湪鏈鎺ヨ繎锛堜綘鎵浣跨敤鐨勪富鐗堟湰锛夌殑灏忔敼杩涚増鏈彂甯冨敖蹇崌绾с傚敖绠℃瘡娆″崌绾у彲鑳介兘鏈変竴鐐归闄╋紝PostgreSQL鐨勫皬鏀硅繘鐗堜粎浠呮槸璁捐鐢ㄦ潵淇涓浜汢ug鐨勶紝浠g爜鏀瑰姩杈冨皯锛屾墍浠ラ闄╄繕鏄緢灏忕殑銆侾ostgreSQL绀惧尯璁や负涓鑸儏鍐典笅涓嶅崌绾х殑椋庨櫓杩樻槸澶氫簬鍗囩骇鐨勩 +

+

+ 涓荤増鏈殑鍗囩骇锛堜緥濡備粠 7.3 鍒 7.4锛夐氬父浼氫慨鏀圭郴缁熻〃鍜屾暟鎹〃鐨勫唴閮ㄦ牸寮忋 + 杩欎簺鏀瑰彉涓鑸瘮杈冨鏉傦紝鍥犳鎴戜滑涓嶇淮鎸佹暟鎹枃浠剁殑鍚戝悗鍏煎鎬с傚洜姝や粠鑰佺増鏈腑杩涜鏁版嵁瀵煎嚭锛坉ump锛/鐒跺悗鍦ㄦ柊鐗堟湰涓繘琛屾暟鎹鍏ワ紙reload锛夊涓荤増鏈殑鍗囩骇鏄繀椤荤殑銆 + +

+ +

3.7)(浣跨敤PostgreSQL)鎴戦渶瑕佷娇鐢ㄤ粈涔堣绠楁満纭欢 锛

+

+ 鐢变簬璁$畻鏈虹‖浠跺ぇ澶氭暟鏄吋瀹圭殑锛屼汉浠绘槸鍊惧悜浜庣浉淇℃墍鏈夎绠楁満纭欢璐ㄩ噺涔熸槸鐩稿悓鐨勩備簨瀹炰笂涓嶆槸锛 + ECC RAM锛堝甫濂囧伓鏍¢獙鐨勫唴瀛橈級锛孲CSI 锛堢‖鐩橈級鍜屼紭璐ㄧ殑涓绘澘姣斾竴浜涗究瀹滆揣瑕佹洿鍔犲彲闈犱笖鍏锋湁鏇村ソ鐨勬ц兘銆侾ostgreSQL鍑犱箮鍙互杩愯鍦ㄤ换浣曠‖浠朵笂锛 + 浣嗗鏋滃彲闈犳у拰鎬ц兘瀵逛綘鐨勭郴缁熷緢閲嶈锛屼綘灏遍渶瑕佸叏闈㈢殑鐮旂┒涓涓嬩綘鐨勭‖浠堕厤缃簡銆傚湪鎴戜滑鐨勯偖浠跺垪琛ㄤ笂涔熸湁鍏充簬 + 纭欢閰嶇疆鍜屾т环姣旂殑璁ㄨ銆 +

+ + +
+ +

鎿嶄綔闂

+ + + +

4.1) 濡備綍鍙夋嫨涓涓煡璇㈢粨鏋滅殑澶村嚑琛岋紵鎴栨槸闅忔満鐨勪竴琛岋紵

+

+ 濡傛灉浣犲彧鏄鎻愬彇鍑犺鏁版嵁锛屽苟涓斾綘鍦ㄦ墽琛屾煡璇腑鐭ラ亾纭垏鐨勮鏁帮紝浣犲彲浠ヤ娇鐢↙IMIT鍔熻兘銆 + 濡傛灉鏈変竴涓储寮曚笌 ORDER BY涓殑鏉′欢鍖归厤锛孭ostgreSQL 鍙兘灏卞彧澶勭悊瑕佹眰鐨勫ご鍑犳潯璁板綍锛 + 锛堝惁鍒欏皢瀵规暣涓煡璇㈣繘琛屽鐞嗙洿鍒扮敓鎴愰渶瑕佺殑琛岋級銆傚鏋滃湪鎵ц鏌ヨ鍔熻兘鏃朵笉鐭ラ亾纭垏鐨勮褰曟暟锛 + 鍙娇鐢ㄦ父鏍(cursor)鍜孎ETCH鍔熻兘銆 +

+

+ 鍙娇鐢ㄤ互涓嬫柟娉曟彁鍙栦竴琛岄殢鏈鸿褰曠殑锛 +

+
+      SELECT  cols
+      FROM tab
+      ORDER BY random()
+      LIMIT 1 ;
+
+
+ + + +

4.2) 濡備綍鏌ョ湅琛ㄣ佺储寮曘佹暟鎹簱浠ュ強鐢ㄦ埛鐨勫畾涔夛紵濡備綍鏌ョ湅psql閲岀敤鍒扮殑鏌ヨ鎸囦护骞舵樉绀哄畠浠紵

+

+ 鍦psql涓娇鐢 \dt 鍛戒护鏉ユ樉绀烘暟鎹〃鐨勫畾涔夛紝瑕佷簡瑙psql涓殑瀹屾暣鍛戒护鍒楄〃鍙娇鐢╘? 锛屽彟澶栵紝浣犱篃鍙互闃呰 psql 鐨勬簮浠g爜 + 鏂囦欢pgsql/src/bin/psql/describe.c锛屽畠鍖呮嫭涓虹敓鎴psql鍙嶆枩鏉犲懡浠ょ殑杈撳嚭鐨勬墍鏈 SQL 鍛戒护銆備綘杩樺彲浠ュ甫 -E 閫夐」鍚姩 psql锛 + 杩欐牱瀹冨皢鎵撳嵃鍑轰綘鍦psql涓墍缁欏嚭鐨勫懡浠ゆ墽琛屾椂鐨勫唴閮ㄥ疄闄呬娇鐢ㄧ殑SQL鏌ヨ璇彞銆侾ostgreSQL涔熸彁渚涗簡涓涓吋瀹筍QL鐨処NFORMATION SCHEMA鎺ュ彛锛 + 浣犲彲浠ヤ粠杩欓噷鑾峰彇鍏充簬鏁版嵁搴撶殑淇℃伅銆 + +

+

+ 鍦ㄧ郴缁熶腑涔熸湁涓浜涗互pg_ 鎵撳ご鐨勭郴缁熻〃涔熸弿杩颁簡琛ㄧ殑瀹氫箟銆 +

+

+ 浣跨敤 psql -l 鎸囦护鍙互鍒楀嚭鎵鏈夌殑鏁版嵁搴撱 +

+

+ 涔熷彲浠ユ祻瑙堜竴涓 pgsql/src/tutorial/syscat.source鏂囦欢锛屽畠鍒椾妇浜嗗緢澶氬彲浠庢暟鎹簱绯荤粺琛ㄤ腑鑾峰彇淇℃伅鐨凷ELECT璇硶銆 + +

+ + +

4.3) 濡備綍鏇存敼涓涓瓧娈电殑鏁版嵁绫诲瀷锛

+

+ 鍦8.0鐗堟湰閲屾洿鏀逛竴涓瓧娈电殑鏁版嵁绫诲瀷寰堝鏄擄紝鍙娇鐢 ALTER TABLE ALTER COLUMN TYPE 銆 +

+

+ 鍦ㄤ互鍓嶇殑鐗堟湰涓紝鍙互杩欐牱鍋氾細 +

+
+   BEGIN;
+    ALTER TABLE tab ADD COLUMN new_col new_data_type;
+    UPDATE tab SET new_col = CAST(old_col AS new_data_type);
+    ALTER TABLE tab DROP COLUMN old_col;
+    COMMIT;
+
+
+

+ 浣犵劧鍚庡彲浠ヤ娇鐢VACUUM FULL tab 鎸囦护鏉ヤ娇绯荤粺鏀跺洖鏃犳晥鏁版嵁鎵鍗犵敤鐨勭┖闂淬 +

+ +

4.4) 鍗曟潯璁板綍锛屽崟涓〃锛屽崟涓暟鎹簱鐨勬渶澶ч檺鍒舵槸澶氬皯锛

+

+ 涓嬮潰鏄竴浜涢檺鍒讹細 +

+
+ + + + + + + + + + + + +
鍗曚釜鏁版嵁搴撴渶澶у昂瀵革紵鏃犻檺鍒讹紙宸插瓨鍦ㄦ湁 32TB 鐨勬暟鎹簱锛
鍗曚釜琛ㄧ殑鏈澶у昂瀵革紵32 TB
涓琛岃褰曠殑鏈澶у昂瀵革紵1.6 TB
涓涓瓧娈电殑鏈澶у昂瀵?1 GB
涓涓〃閲屾渶澶ц鏁帮紵鏃犻檺鍒
涓涓〃閲屾渶澶у垪鏁帮紵250-1600 锛堜笌鍒楃被鍨嬫湁鍏筹級
涓涓〃閲岀殑鏈澶х储寮曟暟閲忥紵鏃犻檺鍒
+
+ + +

+ 褰撶劧锛屽疄闄呬笂娌℃湁鐪熸鐨勬棤闄愬埗锛岃繕鏄鍙楀彲鐢ㄧ鐩樼┖闂淬佸彲鐢ㄥ唴瀛/浜ゆ崲鍖虹殑鍒剁害銆 + 浜嬪疄涓婏紝褰撲笂杩拌繖浜涙暟鍊煎彉寰楀紓甯稿湴澶ф椂锛岀郴缁熸ц兘涔熶細鍙楀緢澶у奖鍝嶃 +

+ +

+ 鍗曡〃鐨勬渶澶уぇ灏 32 TB 涓嶉渶瑕佹搷浣滅郴缁熷鍗曚釜鏂囦欢涔熼渶杩欎箞澶х殑鏀寔銆傚ぇ琛ㄧ敤澶氫釜 1 GB 鐨勬枃浠跺瓨鍌紝鍥犳鏂囦欢绯荤粺澶у皬鐨勯檺鍒舵槸涓嶉噸瑕佺殑銆 +

+

+ 濡傛灉缂虹渷鐨勫潡澶у皬澧為暱鍒 32K 锛屾渶澶х殑鍗曡〃澶у皬鍜屾渶澶у垪鏁拌繕鍙互澧炲姞鍒板洓鍊嶃 +

+

+ 鏈変竴涓檺鍒跺氨鏄笉鑳藉澶у皬澶氫簬2000瀛楄妭鐨勫垪鍒涘缓绱㈠紩銆傚垢杩愬湴鏄繖鏍风殑绱㈠紩寰堝皯鐢ㄥ埌銆傞氳繃瀵瑰瀛楄妭鍒楃殑鍐呭杩涜MD5鍝堢█杩愮畻缁撴灉杩涜鍑芥暟绱㈠紩鍙鍒楃殑鍞竴鎬у緱鍒颁繚璇侊紝 + 骞朵笖鍏ㄦ枃妫绱㈠厑璁稿鍒椾腑鐨勫崟璇嶈繘琛屾悳绱€ +

+ + +

4.5) 瀛樺偍涓涓吀鍨嬬殑鏂囨湰鏂囦欢閲岀殑鏁版嵁闇瑕佸灏戠鐩樼┖闂达紵

+

+ 涓涓 Postgres 鏁版嵁搴擄紙瀛樺偍涓涓枃鏈枃浠讹級鎵鍗犵敤鐨勭┖闂存渶澶氬彲鑳介渶瑕佺浉褰撲簬杩欎釜鏂囨湰鏂囦欢鑷韩澶у皬5鍊嶇殑纾佺洏绌洪棿銆 +

+

+ 渚嬪锛屽亣璁炬湁涓涓 100,000 琛岀殑鏂囦欢锛屾瘡琛屾湁涓涓暣鏁板拰涓涓枃鏈弿杩般 + 鍋囪鏂囨湰涓茬殑骞冲潎闀垮害涓20瀛楄妭銆傛枃鏈枃浠跺崰鐢 2.8 MB銆傚瓨鏀捐繖浜涙暟鎹殑PostgreSQL鏁版嵁搴撴枃浠跺ぇ绾︽槸 6.4 MB: +

+
+     28 瀛楄妭: 姣忚鐨勫ご锛堝ぇ绾﹀硷級
+     24 瀛楄妭: 涓涓暣鏁板瀷瀛楁鍜屼竴涓枃鏈瀷瀛楁
+   +  4 瀛楄妭: 椤甸潰鍐呮寚鍚戝厓缁勭殑鎸囬拡
+   ----------------------------------------
+     56 瀛楄妭姣忚
+
+   PostgreSQL 鏁版嵁椤电殑澶у皬鏄 8192 瀛楄妭 (8 KB)锛屽垯锛
+
+   8192 瀛楄妭姣忛〉
+   -------------------   =  146 琛/鏁版嵁椤碉紙鍚戜笅鍙栨暣锛
+     56 瀛楄妭姣忚
+
+   100000 鏁版嵁琛
+   --------------------  =  685 鏁版嵁椤碉紙鍚戜笂鍙栨暣锛
+      146 琛/鏁版嵁椤
+
+   685 鏁版嵁椤 * 8192 瀛楄妭/椤  = 5,611,520 瀛楄妭锛5.6 MB锛
+
+ + +

+ 绱㈠紩涓嶉渶瑕佽繖涔堝鐨勯澶栨秷鑰楋紝浣嗕篃纭疄鍖呮嫭琚储寮曠殑鏁版嵁锛屽洜姝ゅ畠浠篃鍙兘寰堝ぇ銆 +

+

+ 绌哄NULL瀛樻斁鍦ㄤ綅鍥句腑锛屽洜姝ゅ崰鐢ㄥ緢灏戠殑绌洪棿銆 +

+ +

4.6) 涓轰粈涔堟垜鐨勬煡璇㈠緢鎱紵涓轰粈涔堣繖浜涙煡璇㈡病鏈夊埄鐢ㄧ储寮曪紵

+

+ 骞堕潪姣忎釜鏌ヨ閮戒細鑷姩浣跨敤绱㈠紩銆傚彧鏈夊湪琛ㄧ殑澶у皬瓒呰繃涓涓渶灏忓硷紝骞朵笖鏌ヨ鍙細閫変腑琛ㄤ腑杈冨皬姣斾緥鐨勮褰曟椂鎵嶄細閲囩敤绱㈠紩銆 + 杩欐槸鍥犱负绱㈠紩鎵弿寮曡捣鐨勯殢鍗崇鐩樺瓨鍙栧彲鑳芥瘮鐩存帴鍦拌鍙栬〃锛堥『搴忔壂鎻忥級鏇存參銆 + +

+

+ 涓轰簡鍒ゆ柇鏄惁浣跨敤绱㈠紩锛孭ostgreSQL蹇呴』鑾峰緱鏈夊叧琛ㄧ殑缁熻鍊笺傝繖浜涚粺璁″煎彲浠ヤ娇鐢 VACUUM ANALYZE锛屾垨 ANALYZE 鑾峰緱銆 + 浣跨敤缁熻鍊硷紝浼樺寲鍣ㄧ煡閬撹〃涓湁澶氬皯琛岋紝灏辫兘澶熸洿濂藉湴鍒ゆ柇鏄惁鍒╃敤绱㈠紩銆 + 缁熻鍊煎纭畾浼樺寲鐨勮繛鎺ラ『搴忓拰杩炴帴鏂规硶涔熷緢鏈夌敤銆傚湪琛ㄧ殑鍐呭鍙戠敓鍙樺寲鏃讹紝搴斿畾鏈熻繘琛岀粺璁″肩殑鏇存柊鏀堕泦銆 +

+

+ 绱㈠紩閫氬父涓嶇敤浜 ORDER BY 鎴栨墽琛岃繛鎺ャ傚涓涓ぇ琛ㄧ殑涓娆¢『搴忔壂鎻忓啀鍋氫竴娆℃帓搴忛氬父姣旂储寮曟壂鎻忚蹇傜劧鑰岋紝濡傛灉灏 LIMIT 鍜 ORDER BY + 缁撳悎鍦ㄤ竴璧蜂娇鐢ㄧ殑璇濓紝閫氬父灏嗕細浣跨敤绱㈠紩锛屽洜涓鸿繖鏃朵粎杩斿洖琛ㄤ腑鐨勪竴灏忛儴鍒嗚褰曘 +

+

+ 濡傛灉浣犵‘淇ostgreSQL鐨勪紭鍖栧櫒浣跨敤椤哄簭鎵弿鏄笉姝g‘鐨勶紝浣犲彲浠ヤ娇鐢SET enable_seqscan TO 'off'鎸囦护鏉ュ叧闂『搴忔壂鎻忥紝 + 鐒跺悗鍐嶆杩愯鏌ヨ锛屼綘灏卞彲浠ョ湅鍑轰娇鐢ㄤ竴涓储寮曟壂鎻忔槸鍚︾‘瀹炶蹇竴浜涖 +

+ +

+ + 褰撲娇鐢ㄩ氶厤绗︽搷浣滐紝渚嬪 LIKE~ 鏃讹紝绱㈠紩鍙兘鍦ㄧ壒瀹氱殑鎯呭喌涓嬩娇鐢細 +

+ +

+ 鍦8.0涔嬪墠鐨勭増鏈腑锛岄櫎闈炶鏌ヨ鐨勬暟鎹被鍨嬪拰绱㈠紩鐨勬暟鎹被鍨嬬浉鍖归厤锛屽惁鍒欑储寮曠粡甯告槸鏈鐢ㄥ埌锛岀壒鍒槸瀵筰nt2,int8鍜屾暟鍊煎瀷鐨勭储寮曘 +

+ +

4.7) 鎴戝浣曟墠鑳界湅鍒版煡璇紭鍖栧櫒鏄庢牱璇勪及澶勭悊鎴戠殑鏌ヨ锛

+ + +

鍙傝 EXPLAIN 鎵嬪唽椤点

+ +

4.8) 鎴戞庢牱鍋氭鍒欒〃杈惧紡鎼滅储鍜屽ぇ灏忓啓鏃犲叧鐨勬鍒欒〃杈惧紡鏌ユ壘锛熸庢牱鍒╃敤绱㈠紩杩涜澶у皬鍐欐棤鍏虫煡鎵撅紵

+

+ 鎿嶄綔绗 ~ 澶勭悊姝e垯琛ㄨ揪寮忓尮閰嶏紝鑰 ~* 澶勭悊澶у皬鍐欐棤鍏崇殑姝e垯琛ㄨ揪寮忓尮閰嶃傚ぇ灏忓啓鏃犲叧鐨 LIKE 鍙樼鎴愪负 ILIKE銆 + +

+

+ 澶у皬鍐欐棤鍏崇殑绛夊紡姣旇緝閫氬父鍐欏仛锛 +

+
+    SELECT *
+    FROM tab
+    WHERE lower(col) = 'abc';
+
+ +

+ 杩欐牱灏嗕笉浼氫娇鐢ㄦ爣鍑嗙殑绱㈠紩銆備絾鏄彲浠ュ垱寤轰竴涓湪杩欑鎯呭喌涓嬩娇鐢ㄧ殑琛ㄨ揪寮忕储寮: +

+
+    CREATE INDEX tabindex ON tab (lower(col));
+
+
+

+ 濡傛灉涓婅堪绱㈠紩鍦ㄥ垱寤烘椂鍔犲叆UNIQUE绾︽潫锛岃櫧鐒剁储寮曞瓧娈佃嚜韬唴瀹瑰彲浠ュ瓨鍌ㄥぇ灏忓啓涓嶉檺鐨勫唴瀹癸紝浣嗗鏋滄湁UNIQUE绾︽潫鍚庯紝杩欎簺鍐呭涓嶈兘浠呬粎鏄ぇ灏忓啓涓嶅悓锛堝惁鍒欎細閫犳垚鍐茬獊锛夈備负浜嗕繚璇佷笉鍙戠敓杩欑鎯呭喌锛屽彲浠ヤ娇鐢–HECK绾︽潫鏉′欢鎴栨槸瑙﹀彂鍣ㄥ湪褰曞叆鏃惰繘琛岄檺鍒躲 +

+ + +

4.9) 鍦ㄤ竴涓煡璇㈤噷锛屾垜鎬庢牱妫娴嬩竴涓瓧娈垫槸鍚︿负 NULL 锛熸垜濡備綍鎵嶈兘鍑嗙‘鎺掑簭鑰屼笉璁烘煇瀛楁鏄惁鍚 NULL 鍊硷紵

+

+ + 鐢 IS NULLIS NOT NULL 娴嬭瘯杩欎釜瀛楁锛屽叿浣撴柟娉曞涓嬶細 +

+
   SELECT *
+   FROM tab
+   WHERE col IS NULL;
+
+ +

涓轰簡鑳藉鍚 NULL瀛楁鎺掑簭锛屽彲鍦 ORDER BY 鏉′欢涓娇鐢 IS NULL鍜 + IS NOT NULL 淇グ绗︼紝鏉′欢涓虹湡 true 灏嗘瘮鏉′欢涓哄亣false 鎺掑湪鍓嶉潰锛屼笅闈㈢殑渚嬪瓙灏变細灏嗗惈 + NULL 鐨勮褰曟帓鍦ㄧ粨鏋滅殑涓婇潰閮ㄥ垎锛 + +

+
   SELECT *
+   FROM tab
+   ORDER BY (col IS NOT NULL)
+
+ +

4.10) 鍚勭瀛楃绫诲瀷涔嬮棿鏈変粈涔堜笉鍚岋紵

+
+ + + + + + + + + + + +
绫诲瀷鍐呴儴鍚嶇О璇存槑
VARCHAR(n)varchar鎸囧畾浜嗘渶澶ч暱搴︼紝鍙橀暱瀛楃涓诧紝涓嶈冻瀹氫箟闀垮害鐨勯儴鍒嗕笉琛ラ綈
CHAR(n)bpchar瀹氶暱瀛楃涓诧紝瀹為檯鏁版嵁涓嶈冻瀹氫箟闀垮害鏃讹紝浠ョ┖鏍艰ˉ榻
TEXTtext娌℃湁鐗瑰埆鐨勪笂闄愰檺鍒讹紙浠呭彈琛岀殑鏈澶ч暱搴﹂檺鍒讹級
BYTEAbytea鍙橀暱瀛楄妭搴忓垪锛堜娇鐢∟ULL瀛楃涔熸槸鍏佽鐨勶級
"char"char鍗曚釜瀛楃
+
+ +

+ 鍦ㄧ郴缁熻〃鍜屽湪涓浜涢敊璇俊鎭噷浣犲皢鐪嬪埌鍐呴儴鍚嶇О銆 +

+

+ 涓婇潰鎵鍒楃殑鍓嶅洓绉嶇被鍨嬫槸"varlena"锛堝彉闀匡級绫诲瀷锛堜篃灏辨槸璇达紝寮澶寸殑鍥涗釜瀛楄妭鏄暱搴︼紝鍚庨潰鎵嶆槸鏁版嵁锛夈 + 浜庢槸瀹為檯鍗犵敤鐨勭┖闂存瘮澹版槑鐨勫ぇ灏忚澶氫竴浜涖 + 鐒惰岃繖浜涚被鍨嬪瀹氫箟寰堥暱鏃堕兘鍙互琚帇缂╁瓨鍌紝鍥犳纾佺洏绌洪棿涔熷彲鑳芥瘮棰勬兂鐨勮灏戙 + +

+

+ VARCHAR(n) 鍦ㄥ瓨鍌ㄩ檺鍒朵簡鏈澶ч暱搴︾殑鍙橀暱瀛楃涓叉槸鏈濂界殑銆 + TEXT 閫傜敤浜庡瓨鍌ㄦ渶澶у彲杈 1G宸﹀彸浣嗘湭瀹氫箟闄愬埗闀垮害鐨勫瓧绗︿覆銆 +

+

+ CHAR(n) 鏈閫傚悎浜庡瓨鍌ㄩ暱搴︾浉鍚岀殑瀛楃涓层 CHAR(n)浼氭牴鎹墍缁欏畾鐨勫瓧娈甸暱搴︿互绌烘牸琛ヨ冻锛堜笉瓒崇殑瀛楁鍐呭锛夛紝 + 鑰 VARCHAR(n) 鍙瓨鍌ㄦ墍缁欏畾鐨勬暟鎹唴瀹广 + BYTEA 鐢ㄤ簬瀛樺偍浜岃繘鍒舵暟鎹紝灏ゅ叾鏄寘鍚 NULL 瀛楄妭鐨勫笺傝繖浜涚被鍨嬪叿鏈夊樊涓嶅鐨勬ц兘銆 + +

+ + + +

4.11.1) 鎴戞庢牱鍒涘缓涓涓簭鍒楀彿鎴栨槸鑷姩閫掑鐨勫瓧娈碉紵

+

PostgreSQL 鏀寔 SERIAL 鏁版嵁绫诲瀷銆傦紙瀛楁瀹氫箟涓篠ERIAL鍚庯級灏嗚嚜鍔ㄥ垱寤轰竴涓簭鍒楃敓鎴愬櫒锛屼緥濡傦細 +

+
+   CREATE TABLE person ( 
+      id   SERIAL, 
+      name TEXT 
+   );
+
+

+ 浼氳嚜鍔ㄨ浆鎹负浠ヤ笅SQL璇彞锛 +

+ +
+   CREATE SEQUENCE person_id_seq;
+   CREATE TABLE person ( 
+      id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
+      name TEXT
+   );
+
+

+ 鍙傝 create_sequence 鎵嬪唽椤佃幏鍙栧叧浜庡簭鍒楃敓鎴愬櫒鐨勬洿澶氫俊鎭 +

+ + +

4.11.2) 鎴戝浣曡幏寰椾竴涓彃鍏ョ殑搴忓垪鍙风殑鍊硷紵

+

+ 涓绉嶆柟娉曟槸鍦ㄦ彃鍏ヤ箣鍓嶅厛鐢ㄥ嚱鏁 nextval() 浠庡簭鍒楀璞¢噷妫绱㈠嚭涓嬩竴涓 SERIAL 鍊硷紝鐒跺悗鍐嶇敤姝ゅ肩簿纭湴鎻掑叆銆備娇鐢 + 4.11.1 閲岀殑渚嬭〃锛屽彲鐢ㄤ吉鐮佽繖鏍锋弿杩帮細 + +

+
+   new_id = execute("SELECT nextval('person_id_seq')");
+   execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
+
+

+ 杩欐牱杩樿兘鍦ㄥ叾浠栨煡璇腑浣跨敤瀛樻斁鍦 new_id 閲岀殑鏂板硷紙渚嬪锛屼綔涓哄弬鐓 person 琛ㄧ殑澶栭敭锛夈 + 娉ㄦ剰鑷姩鍒涘缓鐨 SEQUENCE 瀵硅薄鐨勫悕绉板皢浼氭槸 <table>_<serialcolumn>_seq锛 + 杩欓噷 table 鍜 serialcolumn 鍒嗗埆鏄綘鐨勮〃鐨勫悕绉板拰浣犵殑 SERIAL 瀛楁鐨勫悕绉般 +

+

+ 绫讳技鐨勶紝鍦 SERIAL 瀵硅薄缂虹渷鎻掑叆鍚庝綘鍙互鐢ㄥ嚱鏁 currval() 妫绱㈠垰璧嬪肩殑 SERIAL 鍊硷紝渚嬪锛 + +

+
+   execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
+   new_id = execute("SELECT currval('person_id_seq')");
+
+ +

4.11.3) 鍚屾椂浣跨敤 currval() 浼氬鑷村拰鍏朵粬鐢ㄦ埛鐨勫啿绐佹儏鍐靛悧锛

+

+ 涓嶄細銆currval() 杩斿洖鐨勬槸浣犳湰娆′細璇濊繘绋嬫墍璧嬬殑鍊艰屼笉鏄墍鏈夌敤鎴风殑褰撳墠鍊笺
+ +

+ +

4.11.4) 涓轰粈涔堜笉鍦ㄤ簨鍔″紓甯镐腑姝㈠悗閲嶇敤搴忓垪鍙峰憿锛熶负浠涔堝湪搴忓垪鍙峰瓧娈电殑鍙栧间腑瀛樺湪闂存柇鍛紵

+

+ 涓轰簡鎻愰珮骞跺彂鎬э紝搴忓垪鍙峰湪闇瑕佺殑鏃跺欒祴浜堟鍦ㄨ繍琛岀殑浜嬪姟锛屽苟涓斿湪浜嬪姟缁撴潫涔嬪墠涓嶈繘琛岄攣瀹氾紝 + 杩欏氨浼氬鑷村紓甯镐腑姝㈢殑浜嬪姟鍚庯紝搴忓垪鍙蜂細鍑虹幇闂撮殧銆 +

+ +

4.12) 浠涔堟槸 OID 锛熶粈涔堟槸 CTID

+ + +

PostgreSQL 閲屽垱寤虹殑姣忎竴琛岃褰曢兘浼氳幏寰椾竴涓敮涓鐨OID锛岄櫎闈炲湪鍒涘缓琛ㄦ椂浣跨敤WITHOUT OIDS閫夐」銆 + OID鍒涘缓鏃朵細鑷姩鐢熸垚涓涓4瀛楄妭鐨勬暣鏁帮紝鎵鏈 OID 鍦ㄧ浉搴擯ostgreSQL鏈嶅姟鍣ㄤ腑鍧囨槸鍞竴鐨勩 鐒惰岋紝瀹冨湪瓒呰繃40浜挎椂灏嗘孩鍑猴紝 + OID姝ゅ悗浼氬嚭鐜伴噸澶嶃侾ostgreSQL 鍦ㄥ畠鐨勫唴閮ㄧ郴缁熻〃閲屼娇鐢 OID 鍦ㄨ〃涔嬮棿寤虹珛鑱旂郴銆 +

+

+ 鍦ㄧ敤鎴风殑鏁版嵁琛ㄤ腑锛屾渶濂芥槸浣跨敤SERIAl鏉ヤ唬鏇OID + + 鍥犱负SERIAL鍙淇濊瘉鍦ㄥ崟涓〃涓殑鏁板兼槸鍞竴鐨勫氨鍙互浜嗭紝杩欐牱瀹冩孩鍑虹殑鍙兘鎬у氨闈炲父灏忎簡锛 + SERIAL8鍙敤鏉ヤ繚瀛8瀛楄妭鐨勫簭鍒楁暟鍊笺 +

+ +

+ CTID 鐢ㄤ簬鏍囪瘑甯︾潃鏁版嵁鍧楋紙鍦板潃锛夊拰锛堝潡鍐咃級鍋忕Щ鐨勭壒瀹氱殑鐗╃悊琛屻 + CTID 鍦ㄨ褰曡鏇存敼鎴栭噸杞藉悗鍙戠敓鏀瑰彉銆傜储寮曟暟鎹娇鐢ㄥ畠浠寚鍚戠墿鐞嗚銆 +

+ + + +

4.13) 涓轰粈涔堟垜鏀跺埌閿欒淇℃伅鈥ERROR: Memory exhausted in AllocSetAlloc()鈥濓紵

+

+ 杩欏緢鍙兘鏄郴缁熺殑铏氭嫙鍐呭瓨鐢ㄥ厜浜嗭紝鎴栬呭唴鏍稿鏌愪簺璧勬簮鏈夎緝浣庣殑闄愬埗鍊笺傚湪鍚姩 postmaster 涔嬪墠璇曡瘯涓嬮潰鐨勫懡浠わ細 +

+
+   ulimit -d 262144
+   limit datasize 256m
+
+

+ 鍙栧喅浜庝綘鐢ㄧ殑 shell锛屼笂闈㈠懡浠ゅ彧鏈変竴鏉¤兘鎴愬姛锛屼絾鏄畠灏嗘妸浣犵殑杩涚▼鏁版嵁娈甸檺鍒惰寰楁瘮杈冮珮锛 + 鍥犺屼篃璁歌兘璁╂煡璇㈠畬鎴愩傝繖鏉″懡浠ゅ簲鐢ㄤ簬褰撳墠杩涚▼锛屼互鍙婃墍鏈夊湪杩欐潯鍛戒护杩愯鍚庡垱寤虹殑瀛愯繘绋嬨 + 濡傛灉浣犳槸鍦ㄨ繍琛孲QL瀹㈡埛绔椂鍥犱负鍚庡彴杩斿洖浜嗗お澶氱殑鏁版嵁鑰屽嚭鐜伴棶棰橈紝璇峰湪杩愯瀹㈡埛绔箣鍓嶆墽琛屼笂杩板懡浠ゃ + +

+ +

4.14) 鎴戝浣曟墠鑳界煡閬撴墍杩愯鐨凱ostgreSQL鐨勭増鏈紵

+

+ 浠 psql 閲岋紝杈撳叆 SELECT version();鎸囦护銆 +

+ +

4.15) 鎴戝浣曞垱寤轰竴涓己鐪佸兼槸褰撳墠鏃堕棿鐨勫瓧娈碉紵

+

+ 浣跨敤 CURRENT_TIMESTAMP锛 + +

+
+   CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
+
+ + +

4.16) 鎴戞庢牱杩涜 outer join 锛堝杩炴帴锛夛紵

+

PostgreSQL 閲囩敤鏍囧噯鐨 SQL 璇硶鏀寔澶栬繛鎺ャ傝繖閲屾槸涓や釜渚嬪瓙锛

+
+   SELECT *
+   FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+
+

鎴栨槸

+ +
+   SELECT *
+   FROM t1 LEFT OUTER JOIN t2 USING (col);
+
+

+ 杩欎袱涓瓑浠风殑鏌ヨ鍦 t1.col 鍜 t2.col 涓婂仛杩炴帴锛屽苟涓旇繑鍥 t1 涓墍鏈夋湭杩炴帴鐨勮锛堥偅浜涘湪 t2 涓病鏈夊尮閰嶇殑琛岋級銆 + 鍙砙澶朷杩炴帴锛圧IGHT OUTER JOIN锛夊皢杩斿洖 t2 涓湭杩炴帴鐨勮銆 + 瀹屽叏澶栬繛鎺ワ紙FULL OUTER JOIN锛夊皢杩斿洖 t1 鍜 t2 涓湭杩炴帴鐨勮銆 + 鍏抽敭瀛 OUTER 鍦ㄥ乏[澶朷杩炴帴銆佸彸[澶朷杩炴帴鍜屽畬鍏╗澶朷杩炴帴涓槸鍙夌殑锛屾櫘閫氳繛鎺ヨ绉颁负鍐呰繛鎺ワ紙INNER JOIN锛夈 +

+ + +

4.17) 濡備綍浣跨敤娑夊強澶氫釜鏁版嵁搴撶殑鏌ヨ锛

+

+ 娌℃湁鍔炴硶鏌ヨ褰撳墠鏁版嵁搴撲箣澶栫殑鏁版嵁搴撱 + 鍥犱负PostgreSQL瑕佸姞杞戒笌鏁版嵁搴撶浉鍏崇殑绯荤粺鐩綍锛堢郴缁熻〃锛夛紝鍥犳璺ㄦ暟鎹簱鐨勬煡璇㈠浣曟墽琛屾槸涓嶅畾鐨勩 +

+ +

+ 闄勫姞澧炲兼ā鍧梒ontrib/dblink鍏佽閲囩敤鍑芥暟璋冪敤瀹炵幇璺ㄥ簱鏌ヨ銆傚綋鐒剁敤鎴蜂篃鍙互鍚屾椂杩炴帴鍒颁笉鍚岀殑鏁版嵁搴撴墽琛屾煡璇㈢劧鍚庡湪瀹㈡埛绔悎骞剁粨鏋溿 +

+ +

4.18) 濡備綍璁╁嚱鏁拌繑鍥炲琛屾垨澶氬垪鏁版嵁锛

+

+ 鍦ㄥ嚱鏁颁腑杩斿洖鏁版嵁璁板綍闆嗙殑鍔熻兘鏄緢瀹规槗浣跨敤鐨勶紝璇︽儏鍙傝锛 + http://techdocs.postgresql.org/guides/SetReturningFunctions +

+ +

4.19) 涓轰粈涔堟垜鍦ㄤ娇鐢≒L/PgSQL鍑芥暟瀛樺彇涓存椂琛ㄦ椂浼氭敹鍒伴敊璇俊鎭渞elation with OID ##### does not exist鈥濓紵

+ +

+ PL/PgSQL浼氱紦瀛樺嚱鏁扮殑鑴氭湰鍐呭锛岀敱姝ゅ甫鏉ョ殑涓涓笉濂界殑鍓綔鐢ㄦ槸鑻ヤ竴涓 PL/PgSQL + 鍑芥暟璁块棶浜嗕竴涓复鏃惰〃锛岀劧鍚庤琛ㄨ鍒犻櫎骞堕噸寤轰簡锛屽垯鍐嶆璋冪敤璇ュ嚱鏁板皢澶辫触锛 + 鍥犱负缂撳瓨鐨勫嚱鏁板唴瀹逛粛鐒舵寚鍚戞棫鐨勪复鏃惰〃銆傝В鍐崇殑鏂规硶鏄湪 PL/PgSQL 涓敤EXECUTE + 瀵逛复鏃惰〃杩涜璁块棶銆傝繖鏍蜂細淇濊瘉鏌ヨ鍦ㄦ墽琛屽墠鎬讳細琚噸鏂拌В鏋愩 +

+ +

4.20) 鐩墠鏈夊摢浜涙暟鎹鍒舵柟妗堝彲鐢紵

+

+ 鈥滃鍒垛濆彧鏄竴涓湳璇紝鏈夊ソ鍑犵澶嶅埗鎶鏈彲鐢紝姣忕閮芥湁浼樼偣鍜岀己鐐癸細 +

+

+ + 涓/浠庡鍒舵柟寮忔槸鍏佽涓涓富鏈嶅姟鍣ㄦ帴鍙楄/鍐欑殑鐢宠锛岃屽涓粠鏈嶅姟鍣ㄥ彧鑳芥帴鍙楄/SELECT鏌ヨ鐨勭敵璇凤紝 + 鐩墠鏈娴佽涓斿厤璐圭殑涓/浠嶱ostgreSQL澶嶅埗鏂规鏄 + Slony-I 銆 +

+

+ 澶氫釜涓绘湇鍔″櫒鐨勫鍒舵柟寮忓厑璁稿皢璇/鍐欑殑鐢宠鍙戦佺粰澶氬彴鐨勮绠楁満锛岃繖绉嶆柟寮忕敱浜庨渶瑕佸湪澶氬彴鏈嶅姟鍣ㄤ箣闂村悓姝ユ暟鎹彉鍔 + 鍙兘浼氬甫鏉ヨ緝涓ラ噸鐨勬ц兘鎹熷け锛Pgcluster鏄洰鍓嶈繖绉嶆柟妗 + 涓渶濂界殑锛岃屼笖杩樺彲浠ュ厤璐逛笅杞姐 +

+

+ 涔熸湁涓浜涘晢涓氶渶浠樿垂鍜屽熀浜庣‖浠剁殑鏁版嵁澶嶅埗鏂规锛屾敮鎸佷笂杩板悇绉嶅鍒舵ā鍨嬨 +

+ + +

4.21) 涓轰綍鏌ヨ缁撴灉鏄剧ず鐨勮〃鍚嶆垨鍒楀悕涓庢垜鐨勬煡璇㈣鍙ヤ腑鐨勪笉鍚岋紵涓轰綍澶у啓鐘舵佷笉鑳戒繚鐣欙紵

+ +

+ 鏈甯歌鐨勫師鍥犳槸鍦ㄥ垱寤鸿〃鏃跺琛ㄥ悕鎴栨槸鍒楀悕浣跨敤浜嗗弻寮曞彿鈥溾濓紝褰撲娇鐢ㄤ簡鍙屽紩鍙峰悗锛岃〃鍚嶆垨鍒楀悕锛堢О涓烘爣璇嗙锛夊瓨鍌ㄦ椂鏄尯鍒 +澶у皬鍐欑殑锛 + 杩欐剰璋撶潃浣犲湪鏌ヨ鏃惰〃鍚嶆垨鍒楀悕涔熷簲浣跨敤鍙屽紩鍙凤紝涓浜涘伐鍏疯蒋浠讹紝鍍弍gAdmin浼氬湪鍙戝嚭鍒涘缓琛ㄧ殑鎸囦护鏃惰嚜鍔ㄥ湴鍦ㄦ瘡涓爣璇嗙涓婂姞鍙屽紩鍙枫 + 鍥犳锛屼负浜嗘爣璇嗙鐨勭粺涓锛屼綘搴旇锛 +

+ + + + + \ No newline at end of file