Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
postgres-lambda-diff
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jakob Huber
postgres-lambda-diff
Commits
5e1bfa82
Commit
5e1bfa82
authored
19 years ago
by
Bruce Momjian
Browse files
Options
Downloads
Patches
Plain Diff
Convert Chinese FAQ to valid XHTML, finally.
parent
472f9be4
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
doc/FAQ_chinese
+68
-75
68 additions, 75 deletions
doc/FAQ_chinese
doc/src/FAQ/FAQ_chinese.html
+964
-806
964 additions, 806 deletions
doc/src/FAQ/FAQ_chinese.html
with
1032 additions
and
881 deletions
doc/FAQ_chinese
+
68
−
75
View file @
5e1bfa82
...
@@ -141,7 +141,7 @@
...
@@ -141,7 +141,7 @@
(Portions copyright (c) 1996-2002, PostgreSQL Global Development
(Portions copyright (c) 1996-2002, PostgreSQL Global Development
Group
Group
Portions Copyright (c) 1994-6 Regents of the University of
Portions Copyright (c) 1994-6 Regents of the University of
California)
California)
允许为任何目的使用,拷贝,修改和分发这个软件和它的文档而不收取任何费用
允许为任何目的使用,拷贝,修改和分发这个软件和它的文档而不收取任何费用
...
@@ -277,7 +277,7 @@
...
@@ -277,7 +277,7 @@
的书教授 SQL。(译注:我下载到本地了。)在
的书教授 SQL。(译注:我下载到本地了。)在
http://www.commandprompt.com/ppbook 有另外一本关于 PostgreSQL
http://www.commandprompt.com/ppbook 有另外一本关于 PostgreSQL
的书。在http://www.intermedia.net/support/sql/sqltut.shtm,http://ourw
的书。在http://www.intermedia.net/support/sql/sqltut.shtm,http://ourw
orld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
和
orld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM 和
http://sqlcourse.com 有一个不错的入门教程。
http://sqlcourse.com 有一个不错的入门教程。
另一个是 "Teach Yourself SQL in 21 Days, Second
另一个是 "Teach Yourself SQL in 21 Days, Second
...
@@ -320,7 +320,6 @@
...
@@ -320,7 +320,6 @@
透丛拥乃取N颐腔褂幸恍┧敲挥械奶匦裕缬没Фㄒ謇嘈停坛校
透丛拥乃取N颐腔褂幸恍┧敲挥械奶匦裕缬没Фㄒ謇嘈停坛校
规则和多版本并行控制以减少锁的争用等。
规则和多版本并行控制以减少锁的争用等。
性能
性能
PostgreSQL
PostgreSQL
和其他商用和开源的数据库具有类似的性能。对某些处理它比较快,对
和其他商用和开源的数据库具有类似的性能。对某些处理它比较快,对
...
@@ -338,7 +337,6 @@
...
@@ -338,7 +337,6 @@
测试,并且我们的发布历史显示我们可以提供稳定的,牢固的,可用于
测试,并且我们的发布历史显示我们可以提供稳定的,牢固的,可用于
褂玫陌姹尽N颐窍嘈旁谡夥矫嫖颐怯肫渌氖菘馊砑窍嗟钡摹
褂玫陌姹尽N颐窍嘈旁谡夥矫嫖颐怯肫渌氖菘馊砑窍嗟钡摹
支持
支持
我们的邮件列表提供一个非常大的开发人员和用户的组以帮助解决所碰
我们的邮件列表提供一个非常大的开发人员和用户的组以帮助解决所碰
降娜魏挝侍狻N颐遣荒鼙Vた隙芙饩鑫侍猓啾戎拢逃 DBMS
降娜魏挝侍狻N颐遣荒鼙Vた隙芙饩鑫侍猓啾戎拢逃 DBMS
...
@@ -347,7 +345,6 @@
...
@@ -347,7 +345,6 @@
还要好。还有一些商业性的预包装的支持,可以给提供给那些需要的人
还要好。还有一些商业性的预包装的支持,可以给提供给那些需要的人
#ú卧闹С FAQ 条款 1.6 小节。)
#ú卧闹С FAQ 条款 1.6 小节。)
价格
价格
我们对任何用途都免费,包括商用和非商用目的。你可以不加限制地向
我们对任何用途都免费,包括商用和非商用目的。你可以不加限制地向
愕牟防锛尤胛颐堑拇耄四切┪颐窃谏厦娴陌嫒ㄉ骼锷鞯
愕牟防锛尤胛颐堑拇耄四切┪颐窃谏厦娴陌嫒ㄉ骼锷鞯
...
@@ -667,7 +664,7 @@
...
@@ -667,7 +664,7 @@
4.7) 如何查看表、索引、数据库以及用户的定义?
4.7) 如何查看表、索引、数据库以及用户的定义?
psql 有许多反斜杠命令用于显示这些信息。用 \? 看看都有哪些。以 pg_
psql 有许多反斜杠命令用于显示这些信息。用 \? 看看都有哪些。以 pg_
打头的系统表也描述了这些信息。 psql -l 可以列出所有的数据库。
打头的系统表也描述了这些信息。 psql -l 可以列出所有的数据库。
也可以试试文件
也可以试试文件
...
@@ -692,10 +689,10 @@
...
@@ -692,10 +689,10 @@
常会使用索引,因为只会返回表的一小部分。实际上,虽然 MAX() 和 MIN()
常会使用索引,因为只会返回表的一小部分。实际上,虽然 MAX() 和 MIN()
并不使用索引,通过对 ORDER BY 和 LLIMIT
并不使用索引,通过对 ORDER BY 和 LLIMIT
使用索引取得最大值和最小值也是可以的:
使用索引取得最大值和最小值也是可以的:
SELECT col
SELECT col
FROM tab
FROM tab
ORDER BY col [ DESC ]
ORDER BY col [ DESC ]
LIMIT 1;
LIMIT 1;
当使用通配符操作,例如 LIKE 或 ~ 时,索引只能在特定的情况下使用:
当使用通配符操作,例如 LIKE 或 ~ 时,索引只能在特定的情况下使用:
* 字符串的开始部分必须是普通字符串,也就是说:
* 字符串的开始部分必须是普通字符串,也就是说:
...
@@ -740,11 +737,11 @@
...
@@ -740,11 +737,11 @@
操作符 ~ 处理正则表达式匹配,而 ~*
操作符 ~ 处理正则表达式匹配,而 ~*
处理大小写无关的正则表达式匹配。大写些无关的 LIKE 变种成为 ILIKE。
处理大小写无关的正则表达式匹配。大写些无关的 LIKE 变种成为 ILIKE。
大小写无关的等式比较通常写做:
大小写无关的等式比较通常写做:
SELECT *
SELECT *
FROM tab
FROM tab
WHERE lower(col) = 'abc';
WHERE lower(col) = 'abc';
这样将不会使用标准的索引。但是可以创建一个可被利用的函数索引:
这样将不会使用标准的索引。但是可以创建一个可被利用的函数索引:
CREATE INDEX tabindex ON tab (lower(col));
CREATE INDEX tabindex ON tab (lower(col));
4.13) 在一个查询里,我怎样检测一个字段是否为 NULL?
4.13) 在一个查询里,我怎样检测一个字段是否为 NULL?
...
@@ -752,15 +749,14 @@
...
@@ -752,15 +749,14 @@
4.14) 各种字符类型之间有什么不同?
4.14) 各种字符类型之间有什么不同?
类型 内部名称 说明
类型 内部名称 说明
--------------------------------------------------
--------------------------------------------------
"char" char 1个字符 character
"char" char 1个字符 character
CHAR(#) bpchar
CHAR(#) bpchar 定长字符串,实际数据不足定义长度时,以空格补齐
定长字符串,实际数据不足定义长度时,以空格补齐
VARCHAR(#) varchar
VARCHAR(#) varchar
指定了最大长度,变长字符串,不足定义长度的部分不补齐
指定了最大长度,变长字符串,不足定义长度的部分不补齐
TEXT
text
串长度仅受行的最大长度限制
TEXT
text
串长度仅受行的最大长度限制
BYTEA
bytea
变长字节序列(变长的二进制数据)
BYTEA
bytea
变长字节序列(变长的二进制数据)
在系统表和在一些错误信息里你将看到内部名称。
在系统表和在一些错误信息里你将看到内部名称。
上面最后四种类型是"varlena"(变长)类型(也就是说,开头的四个字节是长
上面最后四种类型是"varlena"(变长)类型(也就是说,开头的四个字节是长
龋竺娌攀鞘荩S谑鞘导收加玫目占浔壬鞯拇笮∫嘁恍H欢庑├嘈
龋竺娌攀鞘荩S谑鞘导收加玫目占浔壬鞯拇笮∫嘁恍H欢庑├嘈
...
@@ -776,18 +772,17 @@
...
@@ -776,18 +772,17 @@
PostgreSQL 支持 SERIAL
PostgreSQL 支持 SERIAL
数据类型。它在字段上自动创建一个序列和索引。例如,
数据类型。它在字段上自动创建一个序列和索引。例如,
CREATE TABLE person (
CREATE TABLE person (
id SERIAL,
id SERIAL,
name TEXT
name TEXT
);
);
会自动转换为:
会自动转换为:
CREATE SEQUENCE person_id_seq;
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
name TEXT
);
);
CREATE UNIQUE INDEX person_id_key ON person ( id );
CREATE UNIQUE INDEX person_id_key ON person ( id );
参考 create_sequence 手册页获取关于序列的更多信息。你还可以用每行的
参考 create_sequence 手册页获取关于序列的更多信息。你还可以用每行的
oid 字段作为一个唯一值。不过,如果你需要倾倒和重载数据库,你需要使用
oid 字段作为一个唯一值。不过,如果你需要倾倒和重载数据库,你需要使用
pg_dump 的 -o 选项或者 COPY WITH OIDS 选项以保留 OID。
pg_dump 的 -o 选项或者 COPY WITH OIDS 选项以保留 OID。
...
@@ -796,8 +791,8 @@
...
@@ -796,8 +791,8 @@
一种方法是在插入之前先用函数 nextval() 从序列对象里检索出下一个 SERIAL
一种方法是在插入之前先用函数 nextval() 从序列对象里检索出下一个 SERIAL
值,然后再显式插入。使用 4.15.1 里的例表,可用伪码这样描述:
值,然后再显式插入。使用 4.15.1 里的例表,可用伪码这样描述:
new_id = execute("SELECT nextval('person_id_seq')");
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise
Pascal')");
Pascal')");
这样还能在其他查询中使用存放在 new_id 里的新值(例如,作为 person
这样还能在其他查询中使用存放在 new_id 里的新值(例如,作为 person
表的外键)。注意自动创建的 SEQUENCE 对象的名称将会是
表的外键)。注意自动创建的 SEQUENCE 对象的名称将会是
...
@@ -805,8 +800,8 @@
...
@@ -805,8 +800,8 @@
分别是你的表的名称和你的 SERIAL 字段的名称。
分别是你的表的名称和你的 SERIAL 字段的名称。
类似的,在 SERIAL 对象缺省插入后你可以用函数 currval() 检索刚赋值的
类似的,在 SERIAL 对象缺省插入后你可以用函数 currval() 检索刚赋值的
SERIAL 值,例如,
SERIAL 值,例如,
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
new_id = execute("SELECT currval('person_id_seq')");
最后,你可以使用从 INSERT 语句返回的 OID
最后,你可以使用从 INSERT 语句返回的 OID
查找缺省值,尽管这可能是最缺乏移植性的方法。在 Perl 里,使用带有
查找缺省值,尽管这可能是最缺乏移植性的方法。在 Perl 里,使用带有
Edmund Mergl 的 DBD::Pg 模块的 DBI,oid 值可以通过 $sth->execute()
Edmund Mergl 的 DBD::Pg 模块的 DBI,oid 值可以通过 $sth->execute()
...
@@ -836,11 +831,11 @@
...
@@ -836,11 +831,11 @@
值。可以在 OID 字段上创建一个索引以快速访问。
值。可以在 OID 字段上创建一个索引以快速访问。
OID 从一个被所有数据库使用的中心区域里赋值给所有新行。如果你想把 OID
OID 从一个被所有数据库使用的中心区域里赋值给所有新行。如果你想把 OID
改成别的值,或者想做一份表的带允 OID 的拷贝,你可以做到:
改成别的值,或者想做一份表的带允 OID 的拷贝,你可以做到:
CREATE TABLE new(old_oid oid, mycol int);
CREATE TABLE new(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old;
SELECT old_oid, mycol INTO new FROM old;
COPY new TO '/tmp/pgtable';
COPY new TO '/tmp/pgtable';
DELETE FROM new;
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
COPY new WITH OIDS FROM '/tmp/pgtable';
OID
OID
用4字节的整数保存,在超过40亿时将溢出。没有人报告出现过溢出,而我们打
用4字节的整数保存,在超过40亿时将溢出。没有人报告出现过溢出,而我们打
阍谟腥吮ǜ嬷跋飧鱿拗啤
阍谟腥吮ǜ嬷跋飧鱿拗啤
...
@@ -851,15 +846,15 @@
...
@@ -851,15 +846,15 @@
一些源代码和一些旧一点的文档使用一些有更常用用法的术语。下面是其中一部
一些源代码和一些旧一点的文档使用一些有更常用用法的术语。下面是其中一部
分:
分:
table, relation, class
table, relation, class
row, record, tuple
row, record, tuple
column, field, attribute
column, field, attribute
retrieve, select
retrieve, select
replace, update
replace, update
append, insert
append, insert
OID, serial value
OID, serial value
portal, cursor
portal, cursor
range variable, table name, table alias
range variable, table name, table alias
有一个通用数据库术语的列表:http://hea-www.harvard.edu/MST/simul/softw
有一个通用数据库术语的列表:http://hea-www.harvard.edu/MST/simul/softw
are/docs/pkgs/pgsql/glossary/glossary.html 。
are/docs/pkgs/pgsql/glossary/glossary.html 。
...
@@ -867,8 +862,8 @@
...
@@ -867,8 +862,8 @@
这很可能是系统的虚拟内存用光了,或者内核对某些资源有较低的限制值。在启
这很可能是系统的虚拟内存用光了,或者内核对某些资源有较低的限制值。在启
动 postmaster 之前试试下面的命令:
动 postmaster 之前试试下面的命令:
ulimit -d 262144
ulimit -d 262144
limit datasize 256m
limit datasize 256m
取决于你用的
取决于你用的
shell,上面命令只有一条能成功,但是它将把你的进程数据段限制设得比较高
shell,上面命令只有一条能成功,但是它将把你的进程数据段限制设得比较高
蚨残砟苋貌檠瓿伞U馓趺钣τ糜诘鼻敖蹋约八性谡馓趺钤诵泻
蚨残砟苋貌檠瓿伞U馓趺钣τ糜诘鼻敖蹋约八性谡馓趺钤诵泻
...
@@ -894,32 +889,31 @@
...
@@ -894,32 +889,31 @@
4.21) 我如何创建一个缺省值是当前时间的字段?
4.21) 我如何创建一个缺省值是当前时间的字段?
使用 CURRENT_TIMESTAMP:
使用 CURRENT_TIMESTAMP:
CREATE TABLE test(x int, modtime timestamp DEFAULT
CREATE TABLE test(x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
CURRENT_TIMESTAMP);
4.22) 为什么使用 IN 的子查询这么慢?
4.22) 为什么使用 IN 的子查询这么慢?
目前,我们通过为外查询的每一行顺序扫描子查询的结果来连接子查询和外查询
目前,我们通过为外查询的每一行顺序扫描子查询的结果来连接子查询和外查询
。如果子查询返回少数几行,而外查询返回很多行,IN
。如果子查询返回少数几行,而外查询返回很多行,IN
执行得很快。为了加快其他 IN 查询的执行,可以用 EXISTS 替换 IN:
执行得很快。为了加快其他 IN 查询的执行,可以用 EXISTS 替换 IN:
SELECT *
SELECT *
FROM tab
FROM tab
WHERE col IN (SELECT subcol FROM subtab);
WHERE col IN (SELECT subcol FROM subtab);
改为:
改为:
SELECT *
SELECT *
FROM tab
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
后者要想执行得更快,subcol
后者要想执行得更快,subcol
应该是一个索引列。我们希望在未来的发布版本中修补这个限制。
应该是一个索引列。我们希望在未来的发布版本中修补这个限制。
4.23) 我怎样进行 outer join (外连接)?
4.23) 我怎样进行 outer join (外连接)?
PostgreSQL 采用标准的 SQL 语法支持外连接。这里是两个例子:
PostgreSQL 采用标准的 SQL 语法支持外连接。这里是两个例子:
SELECT *
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
或
或
SELECT *
SELECT *
FROM t1 LEFT OUTER JOIN t2 USING (col);
FROM t1 LEFT OUTER JOIN t2 USING (col);
这两个等价的查询在 t1.col 和 t2.col 上做连接,并且返饣?t1
这两个等价的查询在 t1.col 和 t2.col 上做连接,并且返饣?t1
中所有未连接的行(那些在 t2 中没有匹配的行)。右[外]连接(RIGHT OUTER
中所有未连接的行(那些在 t2 中没有匹配的行)。右[外]连接(RIGHT OUTER
JOIN)将返回 t2 中未连接的行。完全外连接(FULL OUTER JOIN)将返回 t1 和
JOIN)将返回 t2 中未连接的行。完全外连接(FULL OUTER JOIN)将返回 t1 和
...
@@ -928,14 +922,14 @@
...
@@ -928,14 +922,14 @@
(INNER JOIN)。
(INNER JOIN)。
在此前的版本中,外连接可以用 UNION 和 NOT IN
在此前的版本中,外连接可以用 UNION 和 NOT IN
来模拟。例如,下面的例子在表 tab1 和 tab2 之间做外连接:
来模拟。例如,下面的例子在表 tab1 和 tab2 之间做外连接:
SELECT tab1.col1, tab2.col2
SELECT tab1.col1, tab2.col2
FROM tab1, tab2
FROM tab1, tab2
WHERE tab1.col1 = tab2.col1
WHERE tab1.col1 = tab2.col1
UNION ALL
UNION ALL
SELECT tab1.col1, NULL
SELECT tab1.col1, NULL
FROM tab1
FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1
ORDER BY col1
4.24) 如何使用涉及多个数据库的查询?
4.24) 如何使用涉及多个数据库的查询?
...
@@ -961,8 +955,7 @@
...
@@ -961,8 +955,7 @@
4.27) 有哪些数据复制选项?
4.27) 有哪些数据复制选项?
有几种主/从方式的复制选项。这些选项只允许主数据库进行更新,从数据库只
有几种主/从方式的复制选项。这些选项只允许主数据库进行更新,从数据库只
芙卸痢M
芙卸痢M http://gborg.PostgreSQL.org/genpage?replication_research
http://gborg.PostgreSQL.org/genpage?replication_research
的最后列出了这些选项。在
的最后列出了这些选项。在
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php
正在进行一个多主本复制的解决方案。
正在进行一个多主本复制的解决方案。
...
...
This diff is collapsed.
Click to expand it.
doc/src/FAQ/FAQ_chinese.html
+
964
−
806
View file @
5e1bfa82
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment