From 28ebe6b5d0ecafee14db78759ce906987532b704 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 21 Feb 2007 16:42:36 +0000 Subject: Update Chinese FAQs to have two versions, a traditional Chinese version (Taiwan) and a Simplified version (China (PRC)). Backpatch to 8.2.X. Daojing.Zhou --- doc/FAQ_chinese | 794 ----------------------------- doc/FAQ_chinese_simp | 801 +++++++++++++++++++++++++++++ doc/FAQ_chinese_trad | 793 +++++++++++++++++++++++++++++ doc/src/FAQ/FAQ_chinese.html | 1006 ------------------------------------ doc/src/FAQ/FAQ_chinese_simp.html | 1011 +++++++++++++++++++++++++++++++++++++ doc/src/FAQ/FAQ_chinese_trad.html | 1003 ++++++++++++++++++++++++++++++++++++ 6 files changed, 3608 insertions(+), 1800 deletions(-) delete mode 100644 doc/FAQ_chinese create mode 100644 doc/FAQ_chinese_simp create mode 100644 doc/FAQ_chinese_trad delete mode 100644 doc/src/FAQ/FAQ_chinese.html create mode 100644 doc/src/FAQ/FAQ_chinese_simp.html create mode 100644 doc/src/FAQ/FAQ_chinese_trad.html diff --git a/doc/FAQ_chinese b/doc/FAQ_chinese deleted file mode 100644 index 43d46647592..00000000000 --- a/doc/FAQ_chinese +++ /dev/null @@ -1,794 +0,0 @@ - - PostgreSQL 常FAQ - - 2007 年 1 5 15:40:20 EST - 2007 年 1 29 22:48:04 CST - - 维人Bruce Momjian (pgman@candle.pha.pa.us) - 维人Daojing.Zhoudoudou586@gmail.com - - 档以 - 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)PostgreSQL - 1.7)对PostgreSQL - 1.8)交个BUG - 1.9)解已 BUG 缺 - 1.10)档 - 1.11)该 SQL - 1.12)交补 - 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级容 - 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() 导 - 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.21) 为询示表询中 - 为大 - _________________________________________________________________ - -常 - - 1.1)PostgreSQL 该 - - PostgreSQL 读 Post-Gres-Q-L称为Postgres - 人载声件 MP3 - - PostgreSQL - 系系 系 - 代 DBMS 系使强PostgreSQL - 费并代 以 - - PostgreSQL - 主为们并系个社 - 项被任 - 请人常FAQ - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - - 1.2) PostgreSQL - - 寻PostgreSQL人中 - 央 --- 为个 - 们确个 - CVS管工设主为管工 - 对PostgreSQL PostgreSQL项任人 - 人社 就订件表讨论 - PostgreSQL详 人常 (Developer's FAQ) - 信 - - 1.3)PostgreSQL? - - PostgreSQLBSD许使PostgreSQL - 以PostgreSQL代 以就 软件 - 们追责任就软件中 - 须以声就们使BSD声容 - - PostgreSQL管系 - - c1996-2005PostgreSQL c1994-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.4)PostgreSQL 以系平 - - 说任对 UNIX 容系PostgreSQL - 确平 - - PostgreSQl以微软Windows-NT系Win2000 - SP4WinXP Win2003已 - http://pgfoundry.org/projects/pginstaller载MSDOSWindows - Win95Win98WinMeCygwin模PostgreSQL - - 个为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 载 - - 1.5) PostgreSQL - - http://www.postgresql.org/ftp/载FTP - ftp://ftp.PostgreSQL.org/pub/载 - - 1.6) PostgreSQL - - PostgreSQL 8.2.1 - - 们计年个主级 个个 - - 1.7) 对PostgreSQL - - PostgreSQL社件表为大帮订件表主 - - http://www.postgresql.org/community/lists/ General - Bug件表个好 - - 主IRCFreeNode(irc.freenode.net)#postgresql为 - 以使UNIXirc令 irc -c '#postgresql' - "$USER" irc.freenode.net 使IRC客端 - 个PostgreSQL西(#postgersql-es) - (#postgresql-fr) EFNET个PostgreSQL交 - - 表http://techdocs.postgresql.org/companies.php - - - 1.8) 交个BUG - - 访 - http://www.postgresql.org/support/submitbug填Bug表 - 访ftpftp://ftp.PostgreSQL.org/pub/ - PostgreSQL补 - - 使Bug交表 PostgreSQL件表Bug常以 - - * 交容个BugBug - * 交容个已Bug并已 TODO任表 - * 交Bug已被修 - * 交Bug已修补 软件 - * 请交详信 - + 系 - + PostgreSQL - + Bug - + 信 - + 踪 - * 交容个Bug以工 - + 建个补并 个主 - + Bug修被 TODO任表 - - 1.9) 解已 BUG 缺 - - PostgreSQL 个 SQL:2003 们TODO - 表解已Bug表缺计 - - 请常以 - * 该已 TODO任表 - * 该须 为 - + 符SQL - + 该大大 代 带好微足 - + 该 - * 该被 TODO任表 - - PostgreSQL使Bug踪系 为们件表中 - 以TODO任表工 - Bug们软件 - 对影Bug快被修修 - CVS信使软件信中 - 软件 - - 1.10) 档 - - PostgreSQL大档主详页 /doc - 注为 $PGHOME/doc - 以线PostgreSQLhttp://www.PostgreSQL.org/d - ocs - - 两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.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. - Addison-Wesley欢 The Complete Reference SQL, - Groff McGraw-Hill - - 好们 - * 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.13)PostgreSQL系起 - - 价软件好 价 - - - PostgreSQL 大 - 询触 - 们们没类继并 - 以 - - - PostgreSQL类似对快 - 对 们常 - +/- 10% - - - 们须 就没们 - 认缺稳代 个个 beta - 并们示们以稳 - 产使们信们软件 - - - 们件表个常大人以帮解碰 - 任们解软 - 件并解 - 人群触使PostgreSQL - 好以人 - 1.7 - - 价 - 们对任费 - 以 产 们代 们 - 声声 BSD容 - _________________________________________________________________ - -客端 - - 2.1) 们以PostgreSQL交 - - PostgreSQL(缺)CC项 - 载项好 - 们以计 - - 语 - PHP访PostgreSQLPerlTCLPython以 - http://gborg.postgresql.orgDrivers/Interfaces - 并Internet容索 - - 2.2) 工以PostgreSQL Web 页 - - 个以为http://www.webreview.com - - 对 Web PHP 个好http://www.php.net/ - - 对任人 Perl 使CGI.pmDBD::Pg mod_perl - - 2.3)PostgreSQL形 - - 人PostgreSQLGUI形工软件 - PostgreSQL社档个详表 - _________________________________________________________________ - -系管 - - 3.1) PostgreSQL /usr/local/pgsql 以 - - configure --prefix 项 - - 3.2) - - 缺PostgreSQL许 unix TCP/IP - 修置件postgresql.conf中 - listen_addresses置件$PGDATA/pg_hba.conf - host-based - 身份认并PostgreSQL PostgreSQL - - - 3.3) 以好 - - 个主以PostgreSQL - - 询 - 主修询以好: - - + 建索表达索 - + 使COPY代个Insert - + 个SQL个以交 - + 个索记使CLUSTER - + 个询记使LIMIT - + 使询Prepared Query) - + 使ANALYZE以精确计 - + 使 VACUUM pg_autovacuum - + 大 索建索 - - 置 - 置件postgres.conf中 - 设置影表 - 管//置 - 解http://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/ - - 3.4)PostgreSQL以 - - PostgreSQL 类似 log_* - 置询计工对 - - - 3.5) 为Sorry, too many - clients已太 - - 表示 已达缺100个并 修postgres - ql.conf件max_connections - postmaster并修postmaster - - 3.6)PostgreSQL级容 - - PostgreSQL 对次级主Bug修工 - 7.4.8 级 7.4.9 dump restore - 软件 - - PostgreSQL该 使主尽快 - 尽管次级PostgreSQL设计 - - Bug代 以PostgreSQL社认为 - 级级 - - 主级 7.3 7.4常修系表表 - 们维件容 中 - 导dump/中 - 导reload对主级须 - - 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个容SQLINFORMATION 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 大表大大以 - - 个就对大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) 为询为询没索 - - 并个询使索表大个并 - 询表记索 - 为索起读表顺 - - 为 - 使索PostgreSQL须表计计以使 - VACUUM ANALYZE ANALYZE 使计表中 - 就好索 - 计对确顺表容 - 计 - - 索常 ORDER BY - 对个大表次顺次常索快 - LIMIT ORDER BY - 起使常使索 为表中 - 记 - - 确信PostgreSQL使顺确 以使SET - enable_seqscan TO 'off'令顺 - 次询 就以使个索确快 - - 使符 LIKE ~ 索使 - * 符串须符串就说 - + LIKE 模以 % 头 - + ~ 表达模须以 ^ 头 - * 符串以个符模类头 [a-e] - * 大 ILIKE ~* 使索以 4.8 - 述表达索 - * initdb 须缺设置 C - locale 为系C locale个大符 - 以建个text_pattern_ops索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)); - - 述索建 UNIQUE约索段身容以 - 大容UNIQUE约容大 - 为以使CHECK约件触 - - - 4.9) 个询 个段为 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 记 - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) 符类 - - 类 称 说 - VARCHAR(n) varchar 大度 - 符串足度补 - CHAR(n) bpchar 符串足度以空 补 - TEXT text 没大度 - BYTEA bytea 使NULL符许 - "char" char 个符 - - 系表误信 称 - - 类"varlena"类就说头个 - 度 空声大 - 类以被缩 - 空 - - VARCHAR(n) 大度符串好 TEXT - 大达 1G左度符串 - - CHAR(n) 度符串 CHAR(n) - 段度以空 补足足段容 VARCHAR(n) - 容 BYTEA 尤 NULL - 类差 - - 4.11.1) 建个段 - - PostgreSQL SERIAL 类 - 段为SERIAL建个 - 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 对象称 - __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 - PostgreSQL 40亿溢 OID - PostgreSQL 系表使 OID 表建系 - - 表好使SERIAl代OID - 为SERIAL个表中 - 就以 溢就常 - SERIAL88 - - 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.20) - - 个好 缺 - - 主/许个主读/请个 - /SELECT询请 费主/PostgreSQL - Slony-I - - 个主许读/请计 - - 带严失Pgcluster 中 - 好以费载 - - 费硬件述模 - - 4.21) 为询示表询为大 - - 常 建表对表使使 - 称为 符 大 - 询表使工软件pgAdmin - 建表令个 符 - 为 符 该 - * 建表 符使起 - * 符使 - * 为已 符询使 符起 diff --git a/doc/FAQ_chinese_simp b/doc/FAQ_chinese_simp new file mode 100644 index 00000000000..fde161fa103 --- /dev/null +++ b/doc/FAQ_chinese_simp @@ -0,0 +1,801 @@ + + PostgreSQL 常FAQ + + 2007 年 1 30 17:37:01 EST + 2007 年 2 1 12:55:04 CST + + 维人Bruce Momjian (pgman@candle.pha.pa.us) + 维人Daojing.Zhoudoudou586@gmail.com + + 档以 + 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)PostgreSQL + 1.7)对PostgreSQL + 1.8)交个BUG + 1.9)解已 BUG 缺 + 1.10)档 + 1.11)该 SQL + 1.12)交补 + 1.13)PostgreSQL 系起 + 1.14)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级容 + 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() 导 + 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.21) 为询示表询中 + 为大 + _________________________________________________________________ + +常 + + 1.1)PostgreSQL 该 + + PostgreSQL 读 Post-Gres-Q-L称为Postgres + 人载声件 MP3 + + PostgreSQL + 系系 系 + 代 DBMS 系使强PostgreSQL + 费并代 以 + + PostgreSQL + 主为们并系个社 + 项被任 + 请人常FAQ + http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html + + 1.2) PostgreSQL + + 寻PostgreSQL人中 + 央 --- 为个 + 们确个 + CVS管工设主为管工 + 对PostgreSQL PostgreSQL项任人 + 人社 就订件表讨论 + PostgreSQL详 人常 (Developer's FAQ) + 信 + + 1.3)PostgreSQL? + + PostgreSQLBSD许使PostgreSQL + 以PostgreSQL代 以就 软件 + 们追责任就软件中 + 须以声就们使BSD声容 + + PostgreSQL管系 + + c1996-2005PostgreSQL c1994-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.4)PostgreSQL 以系平 + + 说任对 UNIX 容系PostgreSQL + 确平 + + PostgreSQl以微软Windows-NT系Win2000 + SP4WinXP Win2003已 + http://pgfoundry.org/projects/pginstaller载MSDOSWindows + Win95Win98WinMeCygwin模PostgreSQL + + 个为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 载 + + 1.5) PostgreSQL + + http://www.postgresql.org/ftp/载FTP + ftp://ftp.PostgreSQL.org/pub/载 + + 1.6) PostgreSQL + + PostgreSQL 8.2.1 + + 们计年个主级 个个 + + 1.7) 对PostgreSQL + + PostgreSQL社件表为大帮订件表主 + + http://www.postgresql.org/community/lists/ General + Bug件表个好 + + 主IRCFreeNode(irc.freenode.net)#postgresql为 + 以使UNIXirc令 irc -c '#postgresql' + "$USER" irc.freenode.net 使IRC客端 + 个PostgreSQL西(#postgersql-es) + (#postgresql-fr) EFNET个PostgreSQL交 + + 表http://techdocs.postgresql.org/companies.php + + + 1.8) 交个BUG + + 访 + http://www.postgresql.org/support/submitbug填Bug表 + 访ftpftp://ftp.PostgreSQL.org/pub/ + PostgreSQL补 + + 使Bug交表 PostgreSQL件表Bug常以 + + * 交容个BugBug + * 交容个已Bug并已 TODO任表 + * 交Bug已被修 + * 交Bug已修补 软件 + * 请交详信 + + 系 + + PostgreSQL + + Bug + + 信 + + 踪 + * 交容个Bug以工 + + 建个补并 个主 + + Bug修被 TODO任表 + + 1.9) 解已 BUG 缺 + + PostgreSQL 个 SQL:2003 们TODO + 表解已Bug表缺计 + + 请常以 + * 该已 TODO任表 + * 该须 为 + + 符SQL + + 该大大 代 带好微足 + + 该 + * 该被 TODO任表 + + PostgreSQL使Bug踪系 为们件表中 + 以TODO任表工 + Bug们软件 + 对影Bug快被修修 + CVS信使软件信中 + 软件 + + 1.10) 档 + + PostgreSQL大档主详页 /doc + 注为 $PGHOME/doc + 以线PostgreSQLhttp://www.PostgreSQL.org/d + ocs + + 两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.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. + Addison-Wesley欢 The Complete Reference SQL, + Groff McGraw-Hill + + 好们 + * 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.13)PostgreSQL系起 + + 价软件好 价 + + + PostgreSQL 大 + 询触 + 们们没类继并 + 以 + + + PostgreSQL类似对快 + 对 们常 + +/- 10% + + + 们须 就没们 + 认缺稳代 个个 beta + 并们示们以稳 + 产使们信们软件 + + + 们件表个常大人以帮解碰 + 任们解软 + 件并解 + 人群触使PostgreSQL + 好以人 + 1.7 + + 价 + 们对任费 + 以 产 们代 们 + 声声 BSD容 + + 1.14) PostgreSQL以个家? + + PostgreSQL 8.0使系中 + 信8.0以PostgreSQL身 + 信 + _________________________________________________________________ + +客端 + + 2.1) 们以PostgreSQL交 + + PostgreSQL(缺)CC项 + 载项好 + 们以计 + + 语 + PHP访PostgreSQLPerlTCLPython以 + http://gborg.postgresql.orgDrivers/Interfaces + 并Internet容索 + + 2.2) 工以PostgreSQL Web 页 + + 个以为http://www.webreview.com + + 对 Web PHP 个好http://www.php.net/ + + 对任人 Perl 使CGI.pmDBD::Pg mod_perl + + 2.3)PostgreSQL形 + + 人PostgreSQLGUI形工软件 + PostgreSQL社档个详表 + _________________________________________________________________ + +系管 + + 3.1) PostgreSQL /usr/local/pgsql 以 + + configure --prefix 项 + + 3.2) + + 缺PostgreSQL许 unix TCP/IP + 修置件postgresql.conf中 + listen_addresses置件$PGDATA/pg_hba.conf + host-based + 身份认并PostgreSQL PostgreSQL + + + 3.3) 以好 + + 个主以PostgreSQL + + 询 + 主修询以好: + + + 建索表达索 + + 使COPY代个Insert + + 个SQL个以交 + + 个索记使CLUSTER + + 个询记使LIMIT + + 使询Prepared Query) + + 使ANALYZE以精确计 + + 使 VACUUM pg_autovacuum + + 大 索建索 + + 置 + 置件postgres.conf中 + 设置影表 + 管//置 + 解http://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/ + + 3.4)PostgreSQL以 + + PostgreSQL 类似 log_* + 置询计工对 + + + 3.5) 为Sorry, too many + clients已太 + + 表示 已达缺100个并 修postgres + ql.conf件max_connections + postmaster并修postmaster + + 3.6)PostgreSQL级容 + + PostgreSQL 对次级主Bug修工 + 7.4.8 级 7.4.9 dump restore + 软件 + + PostgreSQL该 使主尽快 + 尽管次级PostgreSQL设计 + + Bug代 以PostgreSQL社认为 + 级级 + + 主级 7.3 7.4常修系表表 + 们维件容 中 + 导dump/中 + 导reload对主级须 + + 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个容SQLINFORMATION 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 大表大大以 + + 个就对大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) 为询为询没索 + + 并个询使索表大个并 + 询表记索 + 为索起读表顺 + + 为 + 使索PostgreSQL须表计计以使 + VACUUM ANALYZE ANALYZE 使计表中 + 就好索 + 计对确顺表容 + 计 + + 索常 ORDER BY + 对个大表次顺次常索快 + LIMIT ORDER BY + 起使常使索 为表中 + 记 + + 确信PostgreSQL使顺确 以使SET + enable_seqscan TO 'off'令顺 + 次询 就以使个索确快 + + 使符 LIKE ~ 索使 + * 符串须符串就说 + + LIKE 模以 % 头 + + ~ 表达模须以 ^ 头 + * 符串以个符模类头 [a-e] + * 大 ILIKE ~* 使索以 4.8 + 述表达索 + * initdb 须缺设置 C + locale 为系C locale个大符 + 以建个text_pattern_ops索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)); + + 述索建 UNIQUE约索段身容以 + 大容UNIQUE约容大 + 为以使CHECK约件触 + + + 4.9) 个询 个段为 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 记 + SELECT * + FROM tab + ORDER BY (col IS NOT NULL) + + 4.10) 符类 + + 类 称 说 + VARCHAR(n) varchar 大度 + 符串足度补 + CHAR(n) bpchar 符串足度以空 补 + TEXT text 没大度 + BYTEA bytea 使NULL符许 + "char" char 个符 + + 系表误信 称 + + 类"varlena"类就说头个 + 度 空声大 + 类以被缩 + 空 + + VARCHAR(n) 大度符串好 TEXT + 大达 1G左度符串 + + CHAR(n) 度符串 CHAR(n) + 段度以空 补足足段容 VARCHAR(n) + 容 BYTEA 尤 NULL + 类差 + + 4.11.1) 建个段 + + PostgreSQL SERIAL 类 + 段为SERIAL建个 + 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 对象称 +
__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 + PostgreSQL 40亿溢 OID + PostgreSQL 系表使 OID 表建系 + + 表好使SERIAl代OID + 为SERIAL个表中 + 就以 溢就常 + SERIAL88 + + 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.20) + + 个好 缺 + + 主/许个主读/请个 + /SELECT询请 费主/PostgreSQL + Slony-I + + 个主许读/请计 + + 带严失Pgcluster 中 + 好以费载 + + 费硬件述模 + + 4.21) 为询示表询为大 + + 常 建表对表使使 + 称为 符 大 + 询表使工软件pgAdmin + 建表令个 符 + 为 符 该 + * 建表 符使起 + * 符使 + * 为已 符询使 符起 diff --git a/doc/FAQ_chinese_trad b/doc/FAQ_chinese_trad new file mode 100644 index 00000000000..b1908535777 --- /dev/null +++ b/doc/FAQ_chinese_trad @@ -0,0 +1,793 @@ + + PostgreSQL 常FAQ + + 2007 年 2 8 22:43:13 EST + 2007 年 2 12 12:00:04 CST + + 人Bruce Momjian (pgman@candle.pha.pa.us) + 人(ChaoYi, Kuo)kuo.chaoyi@gmail.com + + 以 + 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) PostgreSQL 麼 + 1.7)裡 PostgreSQL + 1.8)交 BUG + 1.9)解已 BUG 缺 + 1.10) + 1.11)該樣 SQL + 1.12)交 + 1.13)PostgreSQL 庫系統起 + 1.14)PostgreSQL 以家 + +客端 + + 2.1)以麼 PostgreSQL + 2.2)麼工以 PostgreSQL Web + 2.3)PostgreSQL 形(GUI) + +系統管 + + 3.1)樣 PostgreSQL /usr/local/pgsql 以 + 3.2) + 3.3)樣調庫伺以好 + 3.4)PostgreSQL 裡以麼樣調試 + 3.5)麼試Sorry, 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確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) 麼使 PL/PgSQL 表誤relation + with OID ##### does not exist + 4.20) 寫(replication) + 4.21) 詢顯示表詢中 + 大寫 + _________________________________________________________________ + +常 + + 1.1) PostgreSQL 麼該麼 + + PostgreSQL Post-Gres-Q-L簡稱Postgres + 人裡件 MP3 + + PostgreSQL 庫系統統業 + 庫系統代 DBMS + 系統使強PostgreSQL + 費並代碼以 + + PostgreSQL + 主並網繫社 + 被任 + 人常FAQ + http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html + + 1.2) 誰 PostgreSQL + + PostgreSQL人麼中 + 央麼屬 --- + 確 CVS管工設 + 主管工PostgreSQLPostgreSQL + 任人 + 人社 就件表 + PostgreSQL詳 人常 (Developer's FAQ) + + 1.3) PostgreSQL 麼? + + PostgreSQL BSD 許使 + PostgreSQL 以 PostgreSQL + 代碼以就 身追訴 + 責任就 以 + 就使BSD容 + + PostgreSQL 庫管系統 + + c1996-2005PostgreSQL c1994-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.4) PostgreSQL 以系統平 + + 說任 UNIX 容系統 PostgreSQL + 裡確測試平 + + PostgreSQL 以微 Windows-NT 系統 + Win2000 SP4WinXP Win2003已製 + http://pgfoundry.org/projects/pginstallerMSDOSWindows業 + 系統 Win95Win98WinMeCygwin模PostgreSQL + + 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 + + 1.5) 裡 PostgreSQL + + 覽 http://www.postgresql.org/ftp/ FTP + ftp://ftp.PostgreSQL.org/pub/ + + 1.6) PostgreSQL 麼 + + PostgreSQL 8.2.3 + + 年主幾 + + 1.7) 裡 PostgreSQL + + PostgreSQL社件表大幫件表主 + + http://www.postgresql.org/community/lists/ General + Bug件表好 + + 主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.8) 交 BUG + + 訪 http://www.postgresql.org/support/submitbug填寫 Bug + 表 樣訪 ftp ftp://ftp.PostgreSQL.org/pub/ + 檢PostgreSQL + + 使 Bug 交表 PostgreSQL 件表 Bug + 常以 + * 交容 Bug Bug + * 交容已 Bug 並已 TODO 任表 + * 交 Bug 已被修 + * 交 Bug 已修 + * 交詳細 + + 系統 + + PostgreSQL + + Bug 測試 + + 調試 + + 調試蹤輸 + * 交容 Bug以工 + + 建並 主 + + Bug 修被 TODO 任表 + + 1.9) 解已 BUG 缺 + + PostgreSQL SQL:2003 TODO 表解已 Bug + 表缺 + + 常以 + * 該已 TODO 任表 + * 該 + + 符 SQL + + 該大大 代碼帶好微足 + + 該 + * 該被 TODO 任表 + + PostgreSQL 使 Bug 蹤系統 件表中 + 以 TODO + 任表總工實Bug中 + 影Bug總快被修 + 修 CVS + 使 + + 1.10) + + PostgreSQL 大主詳細 測試 + /doc 註 $PGHOME/doc 以覽 PostgreSQL + 網http://www.PostgreSQL.org/docs + + PostgreSQL + http://www.postgresql.org/docs/books/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.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. + 編寫Addison-Wesley The Complete Reference SQL, + Groff 編寫McGraw-Hill + + 網好 + * 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.13) PostgreSQL 庫系統起 + + 好幾種 + + + PostgreSQL 大庫 + 詢觸 + 義繼並 + + + + PostgreSQL庫似快 + 庫常 +/- + 10% + + + 庫 就 + 測試缺穩代碼 beta + 測試並 + 顯示以穩使信 + 庫 + + + 件表常大人以幫解決碰 + 任 + 總解決庫並總 + 決 + 人群觸使PostgreSQL + 庫好業 + 以給給人1.7 + + + 任費 + 以 裡 代碼 + 裡 BSD容 + + 1.14) PostgreSQL 以家? + + PostgreSQL 8.0使系統庫 + 8.0 以 PostgreSQL 身 + _________________________________________________________________ + +客端 + + 2.1) 以麼 PostgreSQL + + PostgreSQL ( ) C C + 好 + 以 + + 編 PHP 訪 PostgreSQL PerlTCLPython + 以 http://gborg.postgresql.org 網 + Drivers/Interfaces 並 Internet 容索 + + 2.2) 麼工以 PostgreSQL Web + + 紹以庫http://www.webreview.com + + Web PHP 極好 http://www.php.net/ + + 任人 Perl 使 CGI.pm DBD::Pg mod_perl + + + 2.3)PostgreSQL 形 + + 人 PostgreSQLGUI 形工 + PostgreSQL社 詳細表 + _________________________________________________________________ + +系統管 + + 3.1)樣 PostgreSQL /usr/local/pgsql 以 + + configure --prefix + + 3.2) + + PostgreSQL 許 unix TCP/IP + 修置件 postgresql.conf + listen_addresses置件 $PGDATA/pg_hba.conf + host-based 身份並 + PostgreSQL PostgreSQL 伺 + + 3.3) 樣調庫以好 + + 主以 PostgreSQL + + 詢 + 主修詢以好: + + + 建索表索 + + 使 COPY 代 Insert + + SQL以交 + + 索使 CLUSTER + + 詢使 LIMIT + + 使 編詢Prepared Query) + + 使 ANALYZE 以精確統 + + 使 VACUUM pg_autovacuum + + 大索建索 + + 伺置 + 置件 postgres.conf 設 + 置影表 + 管/庫伺/庫伺置 + 解http://www.varlena.com/varlena/GeneralBits/Tidb + its/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/ + + 3.4)PostgreSQL 裡以麼樣調試 + + PostgreSQL 似 log_* + 伺置詢統工調試測試 + 幫 + + 3.5) 麼試Sorry, too many + clients已太 + + 表示 已 100 並() 修 + postgresql.conf 件 max_connections postmaster + 併修 postmaster + + 3.6)PostgreSQL 容 + + PostgreSQL 次主 Bug 修工 + 7.4.8 7.4.9 dump restore + 庫伺伺 + + PostgreSQL該 使主快 + 管次風PostgreSQL 修 + Bug + 碼以風PostgreSQL社 + 風 + + 主 7.3 7.4常修系統表表 + 件容 中 + dump/中 + reload主 + + 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 大表大大以 + + 就大2000 + 建索幸樣索 + 容MD5索 + 並檢索許索 + + 4.5) 件裡空 + + Postgres 庫 + 件空件身大5空 + + + 100,000 件述 設 + 串平度20(Byte)件 2.8 MB + PostgreSQL庫件大 5.2 MB: + 24 : 大 + 24 : + + 4 : + ---------------------------------------- + 52 + + PostgreSQL 大 8192 (8 KB) + + 8192 + ------------------- = 158 / + 52 + + 100000 + -------------------- = 633 + 146 / + + 633 * 8192 / = 5,185,536 5.2 MB + + 索麼確實被索 + 大 + + 空 NULL 空 + + 4.6) 麼詢麼詢索 + + 並詢使索表大並詢 + 表索 索起 + 表 + + 使索PostgreSQL + 表統統以使 VACUUM ANALYZE ANALYZE + 使統表中 + 就 好索 + 統確 表容 + 統 + + 索常 ORDER BY + 大表次 次常索快 + LIMIT ORDER BY + 起使話常使索 表 + + 確信PostgreSQL使 確 以使SET + enable_seqscan TO 'off'令 + 次詢 就以使索確實快 + + 使符 LIKE ~ 索使 + * 符串 符串就說 + + LIKE 模以 % + + ~ 表模 以 ^ + * 符串以符模 [a-e] + * 大寫 ILIKE ~* 使索以 4.8 + 述表索 + * initdb 置 C + locale 系統 C locale 大符麼 + 種 以建 text_pattern_ops 索 + 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)); + + 述索建 UNIQUE 索身容以 + 大寫容 UNIQUE + 容大寫 + 種以使 CHECK 件觸 + + 4.9) 詢裡樣檢測 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 + SELECT * + FROM tab + ORDER BY (col IS NOT NULL) + + 4.10) 種符麼 + + 稱 說 + VARCHAR(n) varchar 大度 + 符串足義度 + CHAR(n) bpchar 符串實足義度以空 + TEXT text 大度 + BYTEA bytea 使NULL符許 + "char" char 符 + + 系統表誤裡 稱 + + 種 "varlena"就說 + 度 實空大 + 義以被縮 + 空 + + VARCHAR(n) 大度符串好 TEXT + 大 1G 左義度符串 + + CHAR(n) 度符串 + CHAR(n) 給度以空 足足容 + VARCHAR(n) 給容 BYTEA 尤 + NULL 差 + + 4.11.1) 樣建 + + PostgreSQL SERIAL + 義SERIAL建 + 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 象稱 +
__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 + 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.20) 寫(replication) + + 寫好幾種寫種缺 + + 主/寫許主伺/寫伺 + /SELECT詢 費主/PostgreSQL寫 + Slony-I + + 主伺寫許/寫給主種 + 伺 帶失Pgcluster + 種好並以費 + + 費硬寫述種寫模 + + 4.21) 詢顯示表詢大寫 + + 常 建表表使( ' ' + )使表稱符 大寫 + 詢表使工 pgAdmin + 建表令符 + 符統 該 + * 建表符使起 + * 符使寫 + * 已符詢使符起 diff --git a/doc/src/FAQ/FAQ_chinese.html b/doc/src/FAQ/FAQ_chinese.html deleted file mode 100644 index 5198cbf129d..00000000000 --- a/doc/src/FAQ/FAQ_chinese.html +++ /dev/null @@ -1,1006 +0,0 @@ - - - - - - PostgreSQL 常见问题(FAQ) - - - - - - -

PostgreSQL 常见问题(FAQ)

- - -

最近更新:2007 年 1 月 5 日 星期五 15:40:20 EST
- 中文版最近更新:2007 年 1 月 29 日 星期一 22:48:04 CST -

-

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

- -

- 本文档的最新版本可以在 - 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)最新版的PostgreSQL 是什么?
-1.7)我从哪里能得到对PostgreSQL 的支持?
-1.8)我如何提交一个BUG报告?
-1.9)我如何了解已知的 BUG 或暂缺的功能?
-1.10)能够获取的最新文档有哪些?
-1.11)我应该怎样学习 SQL ?
- -1.12)如何提交补丁或是加入开发队伍?
-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的升级过程有哪些内容?
-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() 会导致和其他用户的冲突情况吗?
-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.21) 为何查询结果显示的表名或列名与我的查询语句中的不同?为何大写状态不能保留?
-

- -
- -

常见问题

- -

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

- - -

PostgreSQL 读作 Post-Gres-Q-L,有时候也简称为Postgres 。想听一下其发音的人员可从这里下载声音文件: - MP3 格式 。 -

- -

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

- -

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

- -

1.2) 谁控制PostgreSQL ?

-

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

- - -

1.3)PostgreSQL的版权是什么?

- - -

PostgreSQL的发布遵从经典的BSD版权。它允许用户不限目的地使用PostgreSQL,甚至你可以销售PostgreSQL而不含源代码也可以,唯一的限制就是你不能因软件自身问题而向我们追诉法律责任,另外就是要求所有的软件拷贝中须包括以下版权声明。下面就是我们所使用的BSD版权声明内容:

- -

PostgreSQL数据库管理系统

- -

部分版权(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.4)PostgreSQL 可以运行在哪些操作系统平台上?

- -

一般说来,任何现在对 UNIX 兼容的操作系统之上都能运行PostgreSQL 。在安装指南里列出了发布时经过明确测试的平台。

- - -

PostgreSQl也可以直接运行在基于微软Windows-NT的操作系统,如Win2000 SP4,WinXP 和 Win2003,已制作完成的安装包可从 - http://pgfoundry.org/projects/pginstaller下载,基于MSDOS的Windows操作系统 - (Win95,Win98,WinMe)需要通过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) 我从哪里能得到PostgreSQL?

- -

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

- -

1.6) 最新版的PostgreSQL是什么?

- - -

PostgreSQL 最新的版本是版本 8.2.1 。

- -

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

- - -

1.7) 我从哪里能得到对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.8) 我如何提交一个BUG报告?

- -

- 可访问 http://www.postgresql.org/support/submitbug,填写Bug上报表格即可,同样也可访问ftp站点ftp://ftp.PostgreSQL.org/pub/ 检查有无更新的PostgreSQL版本或补丁。 -

- - -

-通过使用Bug提交表格或是发往PostgreSQL邮件列表的Bug通常会有以下之一回复: -

- - - - -

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

-

PostgreSQL 支持一个扩展的 SQL:2003 的子集。参阅我们的TODO 列表,了解已知Bug列表、暂缺的功能和将来的开发计划。 - -

- -

要求增加新功能的申请通常会收到以下之一的回复:

- - - -

-PostgreSQL不使用Bug跟踪系统,因为我们发现在邮件列表中直接回复以及保证TODO任务列表总是处于最新状态的方式工作效率会更高一些。事实上,Bug不会在我们的软件中存在很长时间, -对影响很多用户的Bug也总是很快会被修正。唯一能找到所有改进、提高和修正的地方是CVS的日志信息,即使是在软件新版本的发布信息中也不会列出每一处的软件更新。 -

- - - -

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

- - -

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.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. 编写,Addison-Wesley公司出版,其他的则喜欢 - The Complete Reference SQL, Groff 编写,McGraw-Hill公司出版。 -

- -

在下列网址上也有很好的教程,他们是

- - - - -

1.12)如何提交补丁或是加入开发队伍?

-

- 详见 开发人员常见问题 (Developer's FAQ) 。 - -

- - -

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

- -

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

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

用户客户端问题

- - -

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的DBD::Pg 或 mod_perl 。 -

- - -

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

-

- 商业用户或是开源开发人员能找到很多的有关PostgreSQL的GUI图形工具软件,在 PostgreSQL社区文档有一个详细的列表。 -

- - -
- - - -

系统管理问题

- -

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

-

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

- - - -

3.2) 我如何控制来自其他电脑的连接?

-

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

- - -

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

- - -

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

- -
-
查询方式的变化
-
- 这主要涉及修改查询方式以获取更好的性能: -
    -
  • 创建索引,包括表达式和部分索引;
  • - -
  • 使用COPY语句代替多个Insert语句;
  • -
  • 将多个SQL语句组成一个事务以减少提交事务的开销;
  • -
  • 从一个索引中提取多条记录时使用CLUSTER;
  • -
  • 从一个查询结果中取出部分记录时使用LIMIT;
  • -
  • 使用预编译式查询(Prepared 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) 为什么在试图连接时收到“Sorry, too many clients(已有太多用户连接)”消息?

-

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

- - -

3.6)PostgreSQL的升级过程有哪些内容 ?

-

- PostgreSQL 开发组对每次小版本的升级主要只做了一些Bug修正工作,因此从 7.4.8 升级到 7.4.9 不需要 dump 和 restore,仅需要停止数据库服务器,安装更新后的软件包,然后重启服务器即可。 -

-

- 所有PostgreSQL的用户应该在最接近(你所使用的主版本)的小改进版本发布尽快升级。尽管每次升级可能都有一点风险,PostgreSQL的小改进版仅仅是设计用来修正一些Bug的,代码改动较少,所以风险还是很小的。PostgreSQL社区认为一般情况下不升级的风险还是多于升级的。 -

-

- 主版本的升级(例如从 7.3 到 7.4)通常会修改系统表和数据表的内部格式。 - 这些改变一般比较复杂,因此我们不维持数据文件的向后兼容性。因此从老版本中进行数据导出(dump)/然后在新版本中进行数据导入(reload)对主版本的升级是必须的。 - -

- -

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 ,最大的单表大小和最大列数还可以增加到四倍。 -

-

- 有一个限制就是不能对大小多于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) 为什么我的查询很慢?为什么这些查询没有利用索引?

-

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

-

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

-

- 索引通常不用于 ORDER BY 或执行连接。对一个大表的一次顺序扫描再做一次排序通常比索引扫描要快。然而,如果将 LIMIT 和 ORDER BY - 结合在一起使用的话,通常将会使用索引,因为这时仅返回表中的一小部分记录。 -

-

- 如果你确信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));
-
-
-

- 如果上述索引在创建时加入UNIQUE约束,虽然索引字段自身内容可以存储大小写不限的内容,但如果有UNIQUE约束后,这些内容不能仅仅是大小写不同(否则会造成冲突)。为了保证不发生这种情况,可以使用CHECK约束条件或是触发器在录入时进行限制。 -

- - -

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"(变长)类型(也就是说,开头的四个字节是长度,后面才是数据)。 - 于是实际占用的空间比声明的大小要多一些。 - 然而这些类型如定义很长时都可以被压缩存储,因此磁盘空间也可能比预想的要少。 - -

-

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

-

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

- - - -

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

-

PostgreSQL 支持 SERIAL 数据类型。(字段定义为SERIAL后)将自动创建一个序列生成器,例如: -

-
-   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 在相应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.20) 目前有哪些数据复制方案可用?

-

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

-

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

-

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

-

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

- - -

4.21) 为何查询结果显示的表名或列名与我的查询语句中的不同?为何大写状态不能保留?

- -

- 最常见的原因是在创建表时对表名或是列名使用了双引号“”,当使用了双引号后,表名或列名(称为标识符)存储时是区分 -大小写的, - 这意谓着你在查询时表名或列名也应使用双引号,一些工具软件,像pgAdmin会在发出创建表的指令时自动地在每个标识符上加双引号。 - 因此,为了标识符的统一,你应该: -

- - - - - \ No newline at end of file diff --git a/doc/src/FAQ/FAQ_chinese_simp.html b/doc/src/FAQ/FAQ_chinese_simp.html new file mode 100644 index 00000000000..db0a0c306a0 --- /dev/null +++ b/doc/src/FAQ/FAQ_chinese_simp.html @@ -0,0 +1,1011 @@ + + + + + + PostgreSQL 常见问题(FAQ) + + + + + + +

PostgreSQL 常见问题(FAQ)

+ + +

最近更新:2007 年 1 月 30 日 星期二 17:37:01 EST
+ 中文版最近更新:2007 年 2 月 1 日 星期四 12:55:04 CST +

+

目前维护人员:Bruce Momjian (pgman@candle.pha.pa.us)
+ 中文版维护人员:Daojing.Zhou(doudou586@gmail.com) +

+ +

+ 本文档的最新版本可以在 + 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)最新版的PostgreSQL 是什么?
+1.7)我从哪里能得到对PostgreSQL 的支持?
+1.8)我如何提交一个BUG报告?
+1.9)我如何了解已知的 BUG 或暂缺的功能?
+1.10)能够获取的最新文档有哪些?
+1.11)我应该怎样学习 SQL ?
+ +1.12)如何提交补丁或是加入开发队伍?
+1.13)PostgreSQL 和其他数据库系统比起来如何?
+1.14)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的升级过程有哪些内容?
+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() 会导致和其他用户的冲突情况吗?
+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.21) 为何查询结果显示的表名或列名与我的查询语句中的不同?为何大写状态不能保留?
+

+ +
+ +

常见问题

+ +

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

+ + +

PostgreSQL 读作 Post-Gres-Q-L,有时候也简称为Postgres 。想听一下其发音的人员可从这里下载声音文件: + MP3 格式 。 +

+ +

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

+ +

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

+ +

1.2) 谁控制PostgreSQL ?

+

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

+ + +

1.3)PostgreSQL的版权是什么?

+ + +

PostgreSQL的发布遵从经典的BSD版权。它允许用户不限目的地使用PostgreSQL,甚至你可以销售PostgreSQL而不含源代码也可以,唯一的限制就是你不能因软件自身问题而向我们追诉法律责任,另外就是要求所有的软件拷贝中须包括以下版权声明。下面就是我们所使用的BSD版权声明内容:

+ +

PostgreSQL数据库管理系统

+ +

部分版权(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.4)PostgreSQL 可以运行在哪些操作系统平台上?

+ +

一般说来,任何现在对 UNIX 兼容的操作系统之上都能运行PostgreSQL 。在安装指南里列出了发布时经过明确测试的平台。

+ + +

PostgreSQl也可以直接运行在基于微软Windows-NT的操作系统,如Win2000 SP4,WinXP 和 Win2003,已制作完成的安装包可从 + http://pgfoundry.org/projects/pginstaller下载,基于MSDOS的Windows操作系统 + (Win95,Win98,WinMe)需要通过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) 我从哪里能得到PostgreSQL?

+ +

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

+ +

1.6) 最新版的PostgreSQL是什么?

+ + +

PostgreSQL 最新的版本是版本 8.2.1 。

+ +

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

+ + +

1.7) 我从哪里能得到对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.8) 我如何提交一个BUG报告?

+ +

+ 可访问 http://www.postgresql.org/support/submitbug,填写Bug上报表格即可,同样也可访问ftp站点ftp://ftp.PostgreSQL.org/pub/ 检查有无更新的PostgreSQL版本或补丁。 +

+ + +

+通过使用Bug提交表格或是发往PostgreSQL邮件列表的Bug通常会有以下之一回复: +

+ + + + +

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

+

PostgreSQL 支持一个扩展的 SQL:2003 的子集。参阅我们的TODO 列表,了解已知Bug列表、暂缺的功能和将来的开发计划。 + +

+ +

要求增加新功能的申请通常会收到以下之一的回复:

+ + + +

+PostgreSQL不使用Bug跟踪系统,因为我们发现在邮件列表中直接回复以及保证TODO任务列表总是处于最新状态的方式工作效率会更高一些。事实上,Bug不会在我们的软件中存在很长时间, +对影响很多用户的Bug也总是很快会被修正。唯一能找到所有改进、提高和修正的地方是CVS的日志信息,即使是在软件新版本的发布信息中也不会列出每一处的软件更新。 +

+ + + +

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

+ + +

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.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. 编写,Addison-Wesley公司出版,其他的则喜欢 + The Complete Reference SQL, Groff 编写,McGraw-Hill公司出版。 +

+ +

在下列网址上也有很好的教程,他们是

+ + + + +

1.12)如何提交补丁或是加入开发队伍?

+

+ 详见 开发人员常见问题 (Developer's FAQ) 。 + +

+ + +

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

+ +

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

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

1.14) PostgreSQL可以处理最近各个国家夏时制的变化吗?

+ +

PostgreSQL 8.0之前的版本是使用操作系统中的时区数据库来处理夏时制的信息,自8.0版及以后的版本PostgreSQL会自身含有最新的时区信息。

+ + +
+ + +

用户客户端问题

+ + +

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的DBD::Pg 或 mod_perl 。 +

+ + +

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

+

+ 商业用户或是开源开发人员能找到很多的有关PostgreSQL的GUI图形工具软件,在 PostgreSQL社区文档有一个详细的列表。 +

+ + +
+ + + +

系统管理问题

+ +

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

+

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

+ + + +

3.2) 我如何控制来自其他电脑的连接?

+

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

+ + +

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

+ + +

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

+ +
+
查询方式的变化
+
+ 这主要涉及修改查询方式以获取更好的性能: +
    +
  • 创建索引,包括表达式和部分索引;
  • + +
  • 使用COPY语句代替多个Insert语句;
  • +
  • 将多个SQL语句组成一个事务以减少提交事务的开销;
  • +
  • 从一个索引中提取多条记录时使用CLUSTER;
  • +
  • 从一个查询结果中取出部分记录时使用LIMIT;
  • +
  • 使用预编译式查询(Prepared 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) 为什么在试图连接时收到“Sorry, too many clients(已有太多用户连接)”消息?

+

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

+ + +

3.6)PostgreSQL的升级过程有哪些内容 ?

+

+ PostgreSQL 开发组对每次小版本的升级主要只做了一些Bug修正工作,因此从 7.4.8 升级到 7.4.9 不需要 dump 和 restore,仅需要停止数据库服务器,安装更新后的软件包,然后重启服务器即可。 +

+

+ 所有PostgreSQL的用户应该在最接近(你所使用的主版本)的小改进版本发布尽快升级。尽管每次升级可能都有一点风险,PostgreSQL的小改进版仅仅是设计用来修正一些Bug的,代码改动较少,所以风险还是很小的。PostgreSQL社区认为一般情况下不升级的风险还是多于升级的。 +

+

+ 主版本的升级(例如从 7.3 到 7.4)通常会修改系统表和数据表的内部格式。 + 这些改变一般比较复杂,因此我们不维持数据文件的向后兼容性。因此从老版本中进行数据导出(dump)/然后在新版本中进行数据导入(reload)对主版本的升级是必须的。 + +

+ +

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 ,最大的单表大小和最大列数还可以增加到四倍。 +

+

+ 有一个限制就是不能对大小多于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) 为什么我的查询很慢?为什么这些查询没有利用索引?

+

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

+

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

+

+ 索引通常不用于 ORDER BY 或执行连接。对一个大表的一次顺序扫描再做一次排序通常比索引扫描要快。然而,如果将 LIMIT 和 ORDER BY + 结合在一起使用的话,通常将会使用索引,因为这时仅返回表中的一小部分记录。 +

+

+ 如果你确信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));
+
+
+

+ 如果上述索引在创建时加入UNIQUE约束,虽然索引字段自身内容可以存储大小写不限的内容,但如果有UNIQUE约束后,这些内容不能仅仅是大小写不同(否则会造成冲突)。为了保证不发生这种情况,可以使用CHECK约束条件或是触发器在录入时进行限制。 +

+ + +

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"(变长)类型(也就是说,开头的四个字节是长度,后面才是数据)。 + 于是实际占用的空间比声明的大小要多一些。 + 然而这些类型如定义很长时都可以被压缩存储,因此磁盘空间也可能比预想的要少。 + +

+

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

+

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

+ + + +

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

+

PostgreSQL 支持 SERIAL 数据类型。(字段定义为SERIAL后)将自动创建一个序列生成器,例如: +

+
+   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 在相应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.20) 目前有哪些数据复制方案可用?

+

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

+

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

+

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

+

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

+ + +

4.21) 为何查询结果显示的表名或列名与我的查询语句中的不同?为何大写状态不能保留?

+ +

+ 最常见的原因是在创建表时对表名或是列名使用了双引号“”,当使用了双引号后,表名或列名(称为标识符)存储时是区分 +大小写的, + 这意谓着你在查询时表名或列名也应使用双引号,一些工具软件,像pgAdmin会在发出创建表的指令时自动地在每个标识符上加双引号。 + 因此,为了标识符的统一,你应该: +

+ + + + + \ No newline at end of file diff --git a/doc/src/FAQ/FAQ_chinese_trad.html b/doc/src/FAQ/FAQ_chinese_trad.html new file mode 100644 index 00000000000..9a56180a084 --- /dev/null +++ b/doc/src/FAQ/FAQ_chinese_trad.html @@ -0,0 +1,1003 @@ + + + + + PostgreSQL 常见问题(FAQ) + + + + + + +

PostgreSQL 常見問題(FAQ)

+ + +

最近更新:2007 年 2 月 8 日 星期二 22:43:13 EST
+ 中文版最近更新:2007 年 2 月 12 日 星期一 12:00:04 CST +

+

當前維護人員:Bruce Momjian (pgman@candle.pha.pa.us)
+ 正體中文版維護人員:郭朝益(ChaoYi, Kuo)(kuo.chaoyi@gmail.com

+ +

+ 本文檔的最新版本可以在 + 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)最新版的 PostgreSQL 是什麼?
+1.7)我從哪裡能得到對 PostgreSQL 的支持?
+1.8)我如何提交一個 BUG 報告?
+1.9)我如何瞭解已知的 BUG 或暫缺的功能?
+1.10)能夠獲取的最新文檔有哪些?
+1.11)我應該怎樣學習 SQL ?
+ +1.12)如何提交補丁或是加入開發隊伍?
+1.13)PostgreSQL 和其他資料庫系統比起來如何?
+1.14)PostgreSQL 可以處理最近各個國家夏時制的變化嗎?
+

+ +

用戶客戶端問題

+

+2.1)我們可以用什麼語言和 PostgreSQL 進行溝通?
+2.2)有什麼工具可以把 PostgreSQL 用於 Web 頁面?
+ +2.3)PostgreSQL 擁有圖形用戶界面(GUI)嗎?
+

+ +

系統管理問題

+

+3.1)我怎樣才能把 PostgreSQL 裝在 /usr/local/pgsql 以外的地方?
+3.2)我如何控制來自其他電腦的連接?
+3.3)我怎樣調整資料庫伺服器以獲得更好的性能?
+ +3.4)PostgreSQL 裡可以獲得什麼樣的調試特性?
+3.5)為什麼在試圖連接登錄時收到「Sorry, 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?我如何才能準確排序而不論某欄位是否含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) 為什麼我在使用 PL/PgSQL 函數存取臨時表時會收到錯誤資訊「relation with OID ##### does not exist」?
+ +4.20) 目前有哪些資料複寫(replication)方案可用?
+4.21) 為何查詢結果顯示的表名或欄名與我的查詢語句中的不同?為何大寫狀態不能保留?
+

+ +
+ +

常見問題

+ +

1.1) PostgreSQL 是什麼?該怎麼發音?

+ + +

PostgreSQL 讀作 Post-Gres-Q-L,有時候也簡稱為Postgres 。想聽一下其發音的人員可從這裡下載聲音文件: + MP3 格式 。 +

+ +

PostgreSQL 是面向目標的關係資料庫系統,它具有傳統商業資料庫系統的所有功能,同時又含有將在下一代 DBMS 系統的使用的增強特性。PostgreSQL 是自由免費的,並且所有源代碼都可以獲得。 +

+ +

PostgreSQL 的開發隊伍主要為志願者,他們遍佈世界各地並通過互聯網進行聯繫,這是一個社區開發項目,它不被任何公司控制。 + 如想加入開發隊伍,請參見開發人員常見問題(FAQ) + http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html + +

+ +

1.2) 誰控制 PostgreSQL ?

+

+ 如果你在尋找PostgreSQL的掌門人,或是什麼中央委員會,或是什麼所屬公司,你只能放棄了---因為一個也不存在,但我們的確有一個 + 核心委員會和CVS管理組,但這些工作組的設立主要是為了進行管理工作而不是對PostgreSQL進行獨佔式控制,PostgreSQL項目是由任何人均 + 可參加的開發人員社區和所有用戶控制的,你所需要做的就是訂閱郵件列表,參與討論即可(要參與PostgreSQL的開發詳見 + 開發人員常問題 (Developer's FAQ) 獲取資訊)。 +

+ + +

1.3) PostgreSQL 的版權是什麼?

+ + +

PostgreSQL的發布遵從經典的 BSD 版權。它允許用戶不限目的地使用 PostgreSQL,甚至你可以銷售 +PostgreSQL 而不含源代碼也可以,唯一的限制就是你不能因軟體自身問題而向我們追訴法律責任,另外就是要求所有的軟體拷貝中須包括以下版權聲明。 +下面就是我們所使用的BSD版權聲明內容:

+ +

PostgreSQL 資料庫管理系統

+ +

部分版權(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.4) PostgreSQL 可以運行在哪些作業系統平台上?

+ +

一般說來,任何現在對 UNIX 相容的作業系統之上都能運行 PostgreSQL 。在安裝指南裡列出了發佈時經過明確測試的平台。

+ + +

PostgreSQL 也可以直接運行在基於微軟 Windows-NT 的作業系統,如 Win2000 SP4,WinXP 和 Win2003,已製作完成的安裝包可從 + http://pgfoundry.org/projects/pginstaller下載,基於MSDOS的Windows作業系統 + (Win95,Win98,WinMe)需要通過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) 我從哪裡能得到 PostgreSQL?

+ +

+ 通過瀏覽器可從 http://www.postgresql.org/ftp/ 下載,也可通過FTP,從 + ftp://ftp.PostgreSQL.org/pub/ 站點下載。 +

+ +

1.6) 最新版的 PostgreSQL 是什麼?

+ + +

PostgreSQL 最新的版本是版本 8.2.3 。

+ +

我們計劃每年發佈一個主要升級版本,每幾個月發佈一個小版本。

+ + +

1.7) 我從哪裡能得到對 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.8) 我如何提交一個 BUG 報告?

+ +

+ 可訪問 http://www.postgresql.org/support/submitbug,填寫 Bug 上報表格即可,同樣也可訪問 ftp 站點 ftp://ftp.PostgreSQL.org/pub/ 檢查有無更新的PostgreSQL 版本或補丁。 +

+ + +

+通過使用 Bug 提交表格或是發往 PostgreSQL 郵件列表的 Bug 通常會有以下之一回覆: +

+ + + + +

1.9) 我如何瞭解已知的 BUG 或暫缺的功能?

+

PostgreSQL 支持一個擴展的 SQL:2003 的子集。參閱我們的 TODO 列表,瞭解已知 Bug 列表、暫缺的功能和將來的開發計劃。 + +

+ +

要求增加新功能的申請通常會收到以下之一的回覆:

+ + + +

+PostgreSQL 不使用 Bug 跟蹤系統,因為我們發現在郵件列表中直接回覆以及保證 TODO 任務列表總是處於最新狀態的方式工作效率會更高一些。事實上,Bug不會在我們的軟體中存在很長時間, +對影響很多用戶的Bug也總是很快會被修正。唯一能找到所有改進、提高和修正的地方是 CVS 的日誌資訊,即使是在軟體新版本的發布資訊中也不會列出每一處的軟體更新。 +

+ + + +

1.10) 能夠獲取的最新文檔有哪些?

+ + +

PostgreSQL 包含大量的文檔,主要有詳細的參考手冊,手冊頁和一些的測試例子。參見 /doc 目錄(譯註:應為 $PGHOME/doc)。 + 你還可以在線瀏覽 PostgreSQL 的手冊,其網址是:http://www.PostgreSQL.org/docs。 +

+ +

+ 有兩本關於PostgreSQL的書在線提供,在 + http://www.postgresql.org/docs/books/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.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. 編寫,Addison-Wesley公司出版,其他的則喜歡 + The Complete Reference SQL, Groff 編寫,McGraw-Hill 公司出版。 +

+ +

在下列網址上也有很好的教程,他們是

+ + + + +

1.12)如何提交補丁或是加入開發隊伍?

+

+ 詳見 開發人員常見問題 (Developer's FAQ)

+ + +

1.13) PostgreSQL 和其他資料庫系統比起來如何?

+ +

+評價軟體有好幾種方法:功能,性能,可靠性,支持和價格。 +

+ +
+
功能
+
PostgreSQL 擁有大型商用資料庫最多的功能,例如:事務,子查詢,觸發器,視圖,外鍵參考完整性和複雜的鎖定等。 + 我們還有一些它們沒有的特性,如用戶定義類型,繼承,規則和多版本並行控制以減少鎖的爭用等。
+ +
+ +
性能
+
PostgreSQL和其他商用和開源的資料庫具有類似的性能。對某些處理它比較快,對其他一些處理它比較慢。 + 與其他資料庫相比,我們的性能優劣通常在 +/- 10%之間。
+
+ +
可靠性
+
+ + 我們都知道資料庫必須是可靠的,否則它就一點用都沒有。我們努力做到發佈經過認真測試的,缺陷最少的穩定代碼。每個版本至少有一個月的 beta + 測試時間,並且我們的發布歷史顯示我們可以提供穩定的,牢固的,可用於生產使用的版本。我們相信在這方面我們與其他的資料庫軟體是相當的。
+
+ +
支持
+
+ 我們的郵件列表提供一個非常大的開發人員和用戶的組以幫助解決所碰到的任何問題。我們不能保證總是能解決問題,相比之下,商用資料庫軟體也並不是總能夠提供解決方法。 + 直接與開發人員,用戶群,手冊和源程序接觸使PostgreSQL的支持比其他資料庫還要好。還有一些商業性的全面技術支持,可以給提供給那些需要的人。(參閱1.7 小節)
+
+ + +
價格
+
+ 我們對任何用途都免費,包括商用和非商用目的。 + 你可以不加限制地向你的產品裡加入我們的代碼,除了那些我們在上面的版權聲明裡聲明的 BSD版權之外的內容。 +
+ +
+ + +

1.14) PostgreSQL 可以處理最近各個國家夏時制的變化嗎?

+ + +

PostgreSQL 8.0之前的版本是使用作業系統中的時區資料庫來處理夏時制的資訊,自 8.0 版及以後的版本 PostgreSQL 會自身含有最新的時區資訊。

+ + +
+ + +

用戶客戶端問題

+ + +

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 的 DBD::Pg 或 mod_perl 。 +

+ + +

2.3)PostgreSQL 擁有圖形用戶界面嗎?

+

+ 商業用戶或是開源開發人員能找到很多的有關 PostgreSQL的GUI 圖形工具軟體,在 PostgreSQL社區文檔 有一個詳細的列表。 +

+ + +
+ + + +

系統管理問題

+ +

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

+

+ 在運行 configure 時加上 --prefix 選項。 +

+ + + +

3.2) 我如何控制來自其他電腦的連接?

+

+ 預設情況下,PostgreSQL 只允許來自本機且通過 unix 域套接字或 TCP/IP 方式的連接。 + 你只有在修改了配置文件 postgresql.conf 中的 listen_addresses,且也在配置文件 $PGDATA/pg_hba.conf 中打開了 + 基於遠程電腦( host-based )的身份認證,並重新啟動 PostgreSQL,否則其他電腦是不能與你的 PostgreSQL 伺服器進行連接的。 +

+ + +

3.3) 我怎樣調整資料庫引擎以獲得更好的性能?

+ + +

+ 有三個主要方面可以提升 PostgreSQL 的潛能。 +

+ +
+
查詢方式的變化
+
+ 這主要涉及修改查詢方式以獲取更好的性能: +
    +
  • 創建索引,包括表達式和部分索引;
  • + +
  • 使用 COPY 語句代替多個 Insert 語句;
  • +
  • 將多個SQL語句組成一個事務以減少提交事務的開銷;
  • +
  • 從一個索引中提取多條記錄時使用 CLUSTER;
  • +
  • 從一個查詢結果中取出部分記錄時使用 LIMIT;
  • +
  • 使用預編譯式查詢(Prepared 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) 為什麼在試圖連接時收到「Sorry, too many clients(已有太多用戶連接)」消息?

+

+ 這表示你已達到預設 100 個並發(同作)後台進程數的限制,你需要通過修改 postgresql.conf 文件中的 max_connections 值來 + 增加 postmaster 的後台併發處理數,修改後需重新啟動 postmaster。 + +

+ + +

3.6)PostgreSQL 的升級過程有哪些內容 ?

+

+ PostgreSQL 開發組對每次小版本的升級主要只做了一些 Bug 修正工作,因此從 7.4.8 升級到 7.4.9 不需要 dump 和 restore,僅需要停止資料庫伺服器,安裝更新後的軟體包,然後重啟伺服器即可。 +

+

+ +所有PostgreSQL的用戶應該在最接近(你所使用的主版本)的小改進版本發佈盡快升級。儘管每次升級可能都有一點風險,PostgreSQL的小改 +進版僅僅是設計用來修正一些 Bug 的,程式碼改動較少,所以風險還是很小的。PostgreSQL社區認為一般情況下不升級的風險還是多於升級的。 +

+

+ 主版本的升級(例如從 7.3 到 7.4)通常會修改系統表和資料表的內部格式。 + 這些改變一般比較複雜,因此我們不維持資料文件的向後兼容性。因此從老版本中進行資料導出(dump)/然後在新版本中進行資料導入(reload)對主版本的升級是必須的。 + +

+ +

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 ,最大的單表大小和最大列數還可以增加到四倍。 +

+

+ 有一個限制就是不能對大小多於2000字節的列創建索引。幸運地是這樣的索引很少用到。通過對多字節列的內容進行MD5哈稀運算結果進行函數索引可對列的唯一性得到保證, + 並且全文檢索允許對列中的單詞進行搜索。 +

+ + +

4.5) 存儲一個典型的文本文件裡的資料需要多少磁盤空間?

+

+ 一個 Postgres 資料庫(存儲一個文本文件)所佔用的空間最多可能需要相當於這個文本文件自身大小5倍的磁盤空間。 +

+

+ 例如,假設有一個 100,000 行的文件,每行有一個整數和一個文本描述。 + 假設文本串的平均長度為20位元組(Byte)。文本文件佔用 2.8 MB。存放這些資料的PostgreSQL資料庫文件大約是 5.2 MB: +

+
     24 字元組: 每行的頭(大約值)
+     24 字元組節: 一個整數型欄位和一個文本型欄位
+   +  4 字元組節: 頁面內指向元組的指針
+   ----------------------------------------
+     52 字元組每行
+
+   PostgreSQL 資料頁的大小是 8192 位元組 (8 KB),則:
+
+   8192 字元組每頁
+   -------------------   =  158 行/資料頁(向下取整)
+     52 字元組每行
+
+   100000 資料行
+   --------------------  =  633 資料頁(向上取整)
+      146 行/資料頁
+
+   633 資料頁 * 8192 字節/頁  = 5,185,536 字節(5.2 MB)
+
+ + +

+ 索引不需要這麼多的額外消耗,但也確實包括被索引的資料,因此它們也可能很大。 +

+

+ 空值 NULL 存放在位圖中,因此佔用很少的空間。 +

+ +

4.6) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引?

+

+ 並非每個查詢都會自動使用索引。只有在表的大小超過一個最小值,並且查詢只會選中表中較小比例的記錄時才會採用索引。 + 這是因為索引掃瞄引起的隨即磁盤存取可能比直接地讀取表(順序掃瞄)更慢。 + +

+

+ 為了判斷是否使用索引,PostgreSQL 必須獲得有關表的統計值。這些統計值可以使用 VACUUM ANALYZE,或 ANALYZE 獲得。 + 使用統計值,優化器知道表中有多少行,就能夠更好地判斷是否利用索引。 + 統計值對確定優化的連接順序和連接方法也很有用。在表的內容發生變化時,應定期進行統計值的更新收集。 +

+

+ 索引通常不用於 ORDER BY 或執行連接。對一個大表的一次順序掃瞄再做一次排序通常比索引掃瞄要快。然而,如果將 LIMIT 和 ORDER BY + 結合在一起使用的話,通常將會使用索引,因為這時僅返回表中的一小部分記錄。 +

+

+ 如果你確信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));
+
+
+

+ 如果上述索引在創建時加入 UNIQUE 約束,雖然索引欄位自身內容可以存儲大小寫不限的內容,但如果有 UNIQUE 約束後,這些內容不能僅僅是大小寫不同(否則會造成衝突)。為了保證不發生這種情況,可以使用 CHECK 約束條件或是觸發器在錄入時進行限制。 +

+ + +

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"(變長)類型(也就是說,開頭的四個字節是長度,後面才是資料)。 + 於是實際佔用的空間比聲明的大小要多一些。 + 然而這些類型如定義很長時都可以被壓縮存儲,因此磁盤空間也可能比預想的要少。 + +

+

+ VARCHAR(n) 在存儲限制了最大長度的變長字符串是最好的。 + TEXT 適用於存儲最大可達 1G 左右但未定義限制長度的字符串。 +

+

+ CHAR(n) 最適合於存儲長度相同的字符串。 CHAR(n)會根據所給定的欄位長度以空格補足(不足的欄位內容), + 而 VARCHAR(n) 只存儲所給定的資料內容。 + BYTEA 用於存儲二進制資料,尤其是包含 NULL 字節的值。這些類型具有差不多的性能。 + +

+ + + +

4.11.1) 我怎樣創建一個序列號或是自動遞增的欄位?

+

PostgreSQL 支持 SERIAL 資料類型。(欄位定義為SERIAL後)將自動創建一個序列生成器,例如: +

+
   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 在相應 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.20) 目前有哪些資料複寫(replication)方案可用?

+

+ 「複寫」只是一個術語,有好幾種複寫技術可用,每種都有優點和缺點: +

+

+ + 主/從式複寫方式是允許一個主伺服器接受讀/寫的申請,而多個從伺服器只能接受讀/SELECT查詢的申請, + 目前最流行且免費的主/從PostgreSQL複寫方案是 + Slony-I 。 +

+

+ 多個主伺服器的複寫方式允許將讀/寫的申請發送給多台的主機,這種方式由於需要在多台伺服器之間同步資料變動 + 可能會帶來較嚴重的性能損失,Pgcluster 是目前這種方案中最好的,並且還可以免費下載。 +

+

+ 也有一些商業需付費和基於硬體的資料複寫方案,支持上述各種複寫模型。 +

+ + +

4.21) 為何查詢結果顯示的表名或欄名與我的查詢語句中的不同?為何大寫狀態不能保留?

+ +

+ 最常見的原因是在創建表時對表名或是欄名使用了雙引號( ' ' ),當使用了雙引號後,表名或欄名(稱為標識符)存儲時是區分 +大小寫的, + 這意謂著你在查詢時表名或欄名也應使用雙引號,一些工具軟體,像 pgAdmin 會在發出創建表的指令時自動地在每個標識符上加雙引號。 + 因此,為了標識符的統一,你應該:

+ + + + + \ No newline at end of file -- cgit v1.2.3