diff --git a/postgresql/doc/src/sgml/advanced.sgml b/postgresql/doc/src/sgml/advanced.sgml index 63ff3e1d..025e46e1 100644 --- a/postgresql/doc/src/sgml/advanced.sgml +++ b/postgresql/doc/src/sgml/advanced.sgml @@ -81,7 +81,7 @@ SELECT * FROM myview; ____________________________________________________________________________--> - 回想一下中的查询。假设天气记录和城市为止的组合列表对我们的应用有用,但我们又不想每次需要使用它时都敲入整个查询。我们可以在该查询上创建一个视图,这会给该查询一个名字,我们可以像使用一个普通表一样来使用它: + 回想一下中的查询。假设天气记录和城市位置的组合列表对我们的应用有用,但我们又不想每次需要使用它时都敲入整个查询。我们可以在该查询上创建一个视图,这会给该查询一个名字,我们可以像使用一个普通表一样来使用它: CREATE VIEW myview AS diff --git a/postgresql/doc/src/sgml/arch-dev.sgml b/postgresql/doc/src/sgml/arch-dev.sgml index 5dc8e873..f32026d2 100644 --- a/postgresql/doc/src/sgml/arch-dev.sgml +++ b/postgresql/doc/src/sgml/arch-dev.sgml @@ -474,8 +474,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - PostgreSQL支持一个强大的 supports a powerful - 规则系统用于支持视图说明和模糊不清的视图更新。本来PostgreSQL规则系统由两种实现组成: + PostgreSQL支持一个强大的 规则系统用于支持视图说明和模糊不清的视图更新。本来PostgreSQL规则系统由两种实现组成: diff --git a/postgresql/doc/src/sgml/catalogs.sgml b/postgresql/doc/src/sgml/catalogs.sgml index 8e354fe2..dcefaaa7 100644 --- a/postgresql/doc/src/sgml/catalogs.sgml +++ b/postgresql/doc/src/sgml/catalogs.sgml @@ -4181,7 +4181,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> 注意在这个目录中的唯一键是(collname、 - collencodingcollencoding), 不仅仅是(collnamecollencoding)。 + collencodingcollnamespace), 不仅仅是(collnamecollnamespace)。 所有collencoding不等于当前数据库编码或-1的编码规则通常都会被PostgreSQL忽略,且禁止创建和collencoding = -1的项重名的项。因此使用一个受限的SQL名字(schema.name)来标识一个排序规则是足够的,即使这根据目录定义是不唯一的。以这种方式定义这个目录的原因是initdb会在集簇初始化时使用系统上所有可用的locale填充这个目录,所以它必须能够为所有可能在集簇中使用的编码保持项。 diff --git a/postgresql/doc/src/sgml/config.sgml b/postgresql/doc/src/sgml/config.sgml index 0dc89023..41a3b36a 100644 --- a/postgresql/doc/src/sgml/config.sgml +++ b/postgresql/doc/src/sgml/config.sgml @@ -3481,7 +3481,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 设置单个Gather或者Gather Merge节点能够开始的工作者的最大数量。并行工作者会从建立的进程池中取得,数量由限制。注意所要求的工作者数量在运行时可能实际无法被满足。如果这种事情发生,该计划将会以比预期更少的工作者运行,这可能会不太高效。默认值是2。把这个值设置为 0(默认值)将会禁用并行查询执行。 + 设置单个Gather或者Gather Merge节点能够开始的工作者的最大数量。并行工作者会从建立的进程池中取得,数量由限制。注意所要求的工作者数量在运行时可能实际无法被满足。如果这种事情发生,该计划将会以比预期更少的工作者运行,这可能会不太高效。默认值是2。把这个值设置为0将会禁用并行查询执行。 ____________________________________________________________________________--> logging_collector被启用时,这个参数决定日志文件将被在哪个目录下创建。它可以被指定为一个绝对路径,也可以被指定为一个相对于集簇数据目录的相对路径。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。 - 默认是pg_log。 + 默认是log @@ -10240,7 +10240,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 指定能在一个表上触发VACUUM的被插入、被更新或被删除元组的最小数量。默认值为50个元组。该参数只能在postgresql.conf文件或在服务器命令中设置。但是对个别表可以通过修改表存储参数来覆盖该设置。 + 指定能在一个表上触发VACUUM的被更新或被删除元组的最小数量。默认值为50个元组。该参数只能在postgresql.conf文件或在服务器命令中设置。但是对个别表可以通过修改表存储参数来覆盖该设置。 @@ -10420,7 +10420,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 清理多事务也允许从pg_multixact/memberspg_multixact/offsets子目录中移除旧文件,这也是为什么默认值被设置为较低的400万多事务。该参数只能在服务器启动时设置,但是对于个别表可以通过修改表存储参数来降低该设置。详见。 + 清理多事务也允许从pg_multixact/memberspg_multixact/offsets子目录中移除旧文件,这也是为什么默认值被设置为较低的4亿事务。该参数只能在服务器启动时设置,但是对于个别表可以通过修改表存储参数来降低该设置。详见 @@ -10451,7 +10451,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 指定用于自动VACUUM操作中的代价延迟值。如果指定-1(默认值),则使用值。默认值为20毫秒。该参数只能在postgresql.conf文件或在服务器命令中设置。但是对个别表可以通过修改表存储参数来覆盖该设置。 + 指定用于自动VACUUM操作中的代价延迟值。如果指定-1,则使用值。默认值为20毫秒。该参数只能在postgresql.conf文件或在服务器命令中设置。但是对个别表可以通过修改表存储参数来覆盖该设置。 diff --git a/postgresql/doc/src/sgml/ddl.sgml b/postgresql/doc/src/sgml/ddl.sgml index 0cef8dfe..d0b04833 100644 --- a/postgresql/doc/src/sgml/ddl.sgml +++ b/postgresql/doc/src/sgml/ddl.sgml @@ -703,7 +703,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 需要注意的是,一个检查约束在其检查表达式值为真或空值时被满足。因为当任何操作数为空时大部分表达式将计算为空值,所以它们不会阻止被约束列中的控制。为了保证一个列不包含控制,可以使用下一节中的非空约束。 + 需要注意的是,一个检查约束在其检查表达式值为真或空值时被满足。因为当任何操作数为空时大部分表达式将计算为空值,所以它们不会阻止被约束列中的空值。为了保证一个列不包含控制,可以使用下一节中的非空约束。 @@ -4939,7 +4939,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 继承的查询仅在附表上执行访问权限检查。例如,在cities表上授予UPDATE权限也隐含着通过cities访问时在capitals表中更新行的权限。这保留了数据(也)在父表中的样子。但是如果没有额外的授权,则不能直接更新capitals表。以类似的方式,父表的行安全性策略(见)适用于继承查询期间来自于子表的行。只有当子表在查询中被明确提到时,其策略(如果有)才会被应用,在那种情况下,附着在其父表上的任何策略都会被忽略。 + 继承的查询仅在父表上执行访问权限检查。例如,在cities表上授予UPDATE权限也隐含着通过cities访问时在capitals表中更新行的权限。这保留了数据(也)在父表中的样子。但是如果没有额外的授权,则不能直接更新capitals表。以类似的方式,父表的行安全性策略(见)适用于继承查询期间来自于子表的行。只有当子表在查询中被明确提到时,其策略(如果有)才会被应用,在那种情况下,附着在其父表上的任何策略都会被忽略。 - 例如,在下面的情况中,ecpg预处理器无法为test方法中的变量dbname找到任何生命,因此将发生一个错误。 + 例如,在下面的情况中,ecpg预处理器无法为test方法中的变量dbname找到任何声明,因此将发生一个错误。 class TestCpp diff --git a/postgresql/doc/src/sgml/extend.sgml b/postgresql/doc/src/sgml/extend.sgml index d67a2540..7730e30d 100644 --- a/postgresql/doc/src/sgml/extend.sgml +++ b/postgresql/doc/src/sgml/extend.sgml @@ -141,7 +141,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 此外,PostgreSQL服务器能够通过动态载入把用户编写的代码结合到它自身中。也就是,用户能够指定一个实现了一个新类型或函数的对象代码文件(例如一个共享库),并且PostgreSQL将按照要求载入它。把用SQL编写的代码加入到服务器会更繁琐。这种即时修改其操作的能力让PostgreSQL独特地适合新应用和存储结构的快速原型设计。 + 此外,PostgreSQL服务器能够通过动态载入把用户编写的代码结合到它自身中。也就是,用户能够指定一个实现了一个新类型或函数的对象代码文件(例如一个共享库),并且PostgreSQL将按照要求载入它。把用SQL编写的代码加入到服务器会更加轻而易举。这种即时修改其操作的能力让PostgreSQL独特地适合新应用和存储结构的快速原型设计。 @@ -452,7 +452,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 多态参数和结果是相互关联的,并且它们在解析调用多态函数的查询时被决定到一种特定的数据类型。每一个被声明为anyelement的位置(参数或返回值)被允许具有任意特定的实际数据类型,但是在任何给定的查询中它们必须全部是相同的实际类型。每一个被声明为anyarray的位置可以有任意数组数据类型,但是相似地,它们必须全部具有相同类型。并且类似地,被声明为anyrange的位置必须是全部是相同的范围类型。此外,如果有位置被声明为anyarray并且其他位置被声明为anyelementanyarray位置中的实际数组类型必须是一个数组,该数组的元素都是出现在anyelement位置的同一种类型。相似地,如果有位置被声明为anyrange并且其他位置被声明为anyelementanyrange位置的实际范围类型必须是一个范围,该范围的子类型是出现在anyelement位置的同一种类型。anynonarray被当做和anyelement相同,但是增加了额外的约束要求实际类型不能是一种数组类型。anyenum被当做和anyelement相同,但是增加了额外的约束要求实际类型不能是一种枚举类型。 + 多态参数和结果是相互关联的,并且它们在解析调用多态函数的查询时被决定到一种特定的数据类型。每一个被声明为anyelement的位置(参数或返回值)被允许具有任意特定的实际数据类型,但是在任何给定的查询中它们必须全部是相同的实际类型。每一个被声明为anyarray的位置可以有任意数组数据类型,但是相似地,它们必须全部具有相同类型。并且类似地,被声明为anyrange的位置必须是全部是相同的范围类型。此外,如果有位置被声明为anyarray并且其他位置被声明为anyelementanyarray位置中的实际数组类型必须是一个数组,该数组的元素都是出现在anyelement位置的同一种类型。相似地,如果有位置被声明为anyrange并且其他位置被声明为anyelementanyrange位置的实际范围类型必须是一个范围,该范围的子类型是出现在anyelement位置的同一种类型。anynonarray被当做和anyelement相同,但是增加了额外的约束要求实际类型不能是一种数组类型。anyenum被当做和anyelement相同,但是增加了额外的约束要求实际类型必须是一种枚举类型。 statement_timestamp() timestamp with time zone - 当前日期和时间(当前事务的开始);见 + 当前日期和时间(当前语句的开始);见 @@ -15802,7 +15802,8 @@ now() ____________________________________________________________________________--> - PostgreSQL同样也提供了返回当前语句开始时间的函数, 它们会返回函数被调用时的真实当前时间。这些非 SQL 标准的函数列表如下: + PostgreSQL还提供了返回当前语句的开始时间以及 + 调用该函数时的实际当前时间的函数。这些非 SQL 标准的函数列表如下: transaction_timestamp() statement_timestamp() @@ -26807,7 +26808,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 请注意,除了count以外,这些函数在没有行被选中时返回控制。尤其是sum函数在没有输入行时返回空值,而不是零,并且array_agg在这种情况返回空值而不是一个空数组。必要时可以用coalesce把空值替换成零或一个空数组。 + 请注意,除了count以外,这些函数在没有行被选中时返回空值。尤其是sum函数在没有输入行时返回空值,而不是零,并且array_agg在这种情况返回空值而不是一个空数组。必要时可以用coalesce把空值替换成零或一个空数组。 ____________________________________________________________________________--> - Because 因为PostgreSQL是开源的并且很容易被扩展,一些公司已经使用PostgreSQL并且创建了带有唯一故障转移、复制和负载均衡能力的商业性的闭源方案。 + 因为PostgreSQL是开源的并且很容易被扩展,一些公司已经使用PostgreSQL并且创建了具有独特故障转移、复制和负载均衡能力的商业性的闭源方案。 @@ -1992,7 +1992,7 @@ ____________________________________________________________________________--> 基于优先的多同步后备的synchronous_standby_names示例为: -synchronous_standby_names = '2 (s1, s2, s3)' +synchronous_standby_names = 'FIRST 2 (s1, s2, s3)' 在这个例子中,如果有四个后备服务器s1s2s3s4在运行,两个后备服务器s1s2将被选中为同步后备,因为它们出现在后备服务器名称列表的前部。s3是一个潜在的同步后备,当s1s2中的任何一个失效, 它就会取而代之。s4则是一个异步后备因为它的名字不在列表中。 diff --git a/postgresql/doc/src/sgml/libpq.sgml b/postgresql/doc/src/sgml/libpq.sgml index 6e1301e8..e879ea1a 100644 --- a/postgresql/doc/src/sgml/libpq.sgml +++ b/postgresql/doc/src/sgml/libpq.sgml @@ -1108,7 +1108,7 @@ switch(PQstatus(conn)) - 在使用PQconnectPoll时,连接参数connect_timeout会被忽略:判断是否超时是应用的责任。否则,PQconnectStart后面跟着后面跟着PQconnectPoll循环等效于PQconnectdb。 + 在使用PQconnectPoll时,连接参数connect_timeout会被忽略:判断是否超时是应用的责任。否则,PQconnectStart后面跟着PQconnectPoll循环等效于PQconnectdb diff --git a/postgresql/doc/src/sgml/monitoring.sgml b/postgresql/doc/src/sgml/monitoring.sgml index 9aca6f9a..6c863d9e 100644 --- a/postgresql/doc/src/sgml/monitoring.sgml +++ b/postgresql/doc/src/sgml/monitoring.sgml @@ -4201,7 +4201,7 @@ ____________________________________________________________________________--> received_lsn pg_lsn - 已经接收到并且已经被杀入磁盘的最后一个预写式日志的位置,这个域的初始值是 WAL 接收器启动时使用的第一个日志位置 + 已经接收到并且已经被刷入磁盘的最后一个预写式日志的位置,这个域的初始值是 WAL 接收器启动时使用的第一个日志位置 received_tli integer - 已经接收到并且已经被杀入磁盘的最后一个预写式日志的时间线编号,这个域的初始值是 WAL 接收器启动时使用的第一个日志所在的时间线编号 + 已经接收到并且已经被刷入磁盘的最后一个预写式日志的时间线编号,这个域的初始值是 WAL 接收器启动时使用的第一个日志所在的时间线编号 SELECT SUM(value) FROM mytab WHERE class = 1; - 并且接着把结果(3)作为一个新行的value插入,新行的class = 2。同时,可序列化事务 B 计算: + 并且接着把结果(30)作为一个新行的value插入,新行的class = 2。同时,可序列化事务 B 计算: SELECT SUM(value) FROM mytab WHERE class = 2; - 并得到结果 300,它会将其与class = 1插入到一个新行中。然后两个事务都尝试提交。如果其中一个事务运行在可重复读隔离级别,两者都被允许提交;但是由于没有执行的序列化顺序能在结果上一致,使用可序列化事务将允许一个事务提交并且将回滚另一个并伴有这个消息: + 并得到结果 300,它会将其与class = 1插入到一个新行中。然后两个事务都尝试提交。如果其中一个事务运行在可重复读隔离级别,两者都被允许提交;但是由于不同的执行顺序可能导致不同结果,使用可序列化事务将允许一个事务提交并且将回滚另一个并伴有这个消息: ERROR: could not serialize access due to read/write dependencies among transactions diff --git a/postgresql/doc/src/sgml/perform.sgml b/postgresql/doc/src/sgml/perform.sgml index 90dc0c78..b24388b6 100644 --- a/postgresql/doc/src/sgml/perform.sgml +++ b/postgresql/doc/src/sgml/perform.sgml @@ -1437,7 +1437,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 在两种有效的方法中EXPLAIN ANALYZE所度量的运行时间可能偏离同一个查询的正常执行。首先,由于不会有输出行被递交给客户端,网络传输开销和 I/O 转换开销没有被包括在内。其次,由EXPLAIN ANALYZE所增加的度量符合可能会很可观,特别是在那些gettimeofday()操作系统调用很慢的机器上。你可以使用工具来度量在你的系统上的计时开销。 + 在两种有效的方法中EXPLAIN ANALYZE所度量的运行时间可能偏离同一个查询的正常执行。首先,由于不会有输出行被递交给客户端,网络传输开销和 I/O 转换开销没有被包括在内。其次,由EXPLAIN ANALYZE所增加的度量开销可能会很可观,特别是在操作系统调用gettimeofday()很慢的机器上。你可以使用工具来度量在你的系统上的计时开销。 PL/pgSQL函数,存储过程或DO块可以使用 -CALL调存储用过程。 +CALL调用存储过程。 输出参数的处理方式与纯SQL中CALL的工作方式不同。 存储过程的每个INOUT参数必须和CALL语句中的变量对应, 并且无论存储过程返回什么,都会在返回后赋值给该变量。 diff --git a/postgresql/doc/src/sgml/ref/alter_procedure.sgml b/postgresql/doc/src/sgml/ref/alter_procedure.sgml index fd62ceda..ac7c216b 100644 --- a/postgresql/doc/src/sgml/ref/alter_procedure.sgml +++ b/postgresql/doc/src/sgml/ref/alter_procedure.sgml @@ -29,7 +29,7 @@ ____________________________________________________________________________--> diff --git a/postgresql/doc/src/sgml/ref/checkpoint.sgml b/postgresql/doc/src/sgml/ref/checkpoint.sgml index 9196b9c5..e415b807 100644 --- a/postgresql/doc/src/sgml/ref/checkpoint.sgml +++ b/postgresql/doc/src/sgml/ref/checkpoint.sgml @@ -31,7 +31,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> CHECKPOINT - 强制一个事务日志检查点 + 强制一个WAL日志检查点 @@ -61,7 +61,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 一个检查点是事务日志序列中的一个点,在该点上所有数据文件 + 一个检查点是WAL日志序列中的一个点,在该点上所有数据文件 都已经被更新为反映日志中的信息。所有数据文件将被刷写到磁盘。 检查点期间发生的细节可见 diff --git a/postgresql/doc/src/sgml/ref/clusterdb.sgml b/postgresql/doc/src/sgml/ref/clusterdb.sgml index f0e043d7..7ef0d8cf 100644 --- a/postgresql/doc/src/sgml/ref/clusterdb.sgml +++ b/postgresql/doc/src/sgml/ref/clusterdb.sgml @@ -586,7 +586,7 @@ ____________________________________________________________________________--> 要聚簇在数据库xyzzy中的一个表foo -$ clusterdb --table foo xyzzy +$ clusterdb --table=foo xyzzy diff --git a/postgresql/doc/src/sgml/ref/copy.sgml b/postgresql/doc/src/sgml/ref/copy.sgml index cff93993..f6f3d863 100644 --- a/postgresql/doc/src/sgml/ref/copy.sgml +++ b/postgresql/doc/src/sgml/ref/copy.sgml @@ -1461,7 +1461,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - binary人间格式由一个文件头、零个或者更多个包含 + binary文件格式由一个文件头、零个或者更多个包含 行数据的元组以及一个文件尾构成。头部和数据都以网络字节序表示。 diff --git a/postgresql/doc/src/sgml/ref/create_procedure.sgml b/postgresql/doc/src/sgml/ref/create_procedure.sgml index 4df55d5e..c493e060 100644 --- a/postgresql/doc/src/sgml/ref/create_procedure.sgml +++ b/postgresql/doc/src/sgml/ref/create_procedure.sgml @@ -145,7 +145,7 @@ ____________________________________________________________________________--> - Parameters + 参数 diff --git a/postgresql/doc/src/sgml/ref/do.sgml b/postgresql/doc/src/sgml/ref/do.sgml index addb3807..4b2fa33d 100644 --- a/postgresql/doc/src/sgml/ref/do.sgml +++ b/postgresql/doc/src/sgml/ref/do.sgml @@ -93,7 +93,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 可选的LANGUAGE子句可以卸载代码块之前或者之后。 + 可选的LANGUAGE子句可以写在代码块之前或者之后。 diff --git a/postgresql/doc/src/sgml/ref/explain.sgml b/postgresql/doc/src/sgml/ref/explain.sgml index b9e07a8d..341e33bd 100644 --- a/postgresql/doc/src/sgml/ref/explain.sgml +++ b/postgresql/doc/src/sgml/ref/explain.sgml @@ -130,7 +130,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 显示中最重要的部分是估计出的语句执行代价,它是计划器对于该语句要运行多久的猜测(以任意的代价单位度量,但是习惯上表示取磁盘页面的次数)。事实上会显示两个数字:在第一行能被返回前的启动代价,以及返回所有行的总代价。对于大部分查询来说总代价是最重要的,但是在一些情景中(如EXISTS中的子查询),计划器将选择更小的启动代价来代替最小的总代价(因为因为执行器将在得到一行后停止)。此外,如果你用一个LIMIT子句限制返回行的数量,计划器会在终端代价之间做出适当的插值来估计到底哪个计划是真正代价最低的。 + 显示中最重要的部分是估计出的语句执行代价,它是计划器对于该语句要运行多久的猜测(以任意的代价单位度量,但是习惯上表示取磁盘页面的次数)。事实上会显示两个数字:在第一行能被返回前的启动代价,以及返回所有行的总代价。对于大部分查询来说总代价是最重要的,但是在一些情景中(如EXISTS中的子查询),计划器将选择更小的启动代价来代替最小的总代价(因为执行器将在得到一行后停止)。此外,如果你用一个LIMIT子句限制返回行的数量,计划器会在终端代价之间做出适当的插值来估计到底哪个计划是真正代价最低的。 ____________________________________________________________________________--> - 为了执行计划中每个结点的运行时间开销,当前的In order to measure the run-time cost of each node in the execution - plan, the current implementation of EXPLAIN - ANALYZE实现为查询执行增加了 profiling overhead 。这样,在一个查询上运行EXPLAIN ANALYZE有时候比正常执行该查询要慢很多。开销的量取决于该查询的性质,以及使用的平台。最坏的情况会发生在那些自身执行时间很短的结点上,以及在那些具有相对较慢的有关时间的操作系统调用的机器上。 + 为了度量执行计划中每个节点的运行时成本,当前的EXPLAIN ANALYZE的当前实现为查询执行增加了性能分析开销。 + 这样,在一个查询上运行EXPLAIN ANALYZE有时候比正常执行该查询要慢很多。 + 开销的量取决于该查询的性质,以及使用的平台。最坏的情况会发生在那些自身执行时间很短的结点上,以及在那些具有相对较慢的有关时间的操作系统调用的机器上。 diff --git a/postgresql/doc/src/sgml/ref/pg_restore.sgml b/postgresql/doc/src/sgml/ref/pg_restore.sgml index 0d911815..a0c707cc 100644 --- a/postgresql/doc/src/sgml/ref/pg_restore.sgml +++ b/postgresql/doc/src/sgml/ref/pg_restore.sgml @@ -938,7 +938,7 @@ ____________________________________________________________________________--> - + diff --git a/postgresql/doc/src/sgml/ref/pgupgrade.sgml b/postgresql/doc/src/sgml/ref/pgupgrade.sgml index f5a604b9..78aca8db 100644 --- a/postgresql/doc/src/sgml/ref/pgupgrade.sgml +++ b/postgresql/doc/src/sgml/ref/pgupgrade.sgml @@ -100,11 +100,11 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 主 PostgreSQL 发行通常会加入新的特性,这些新特性常常会更改系统表的 + PostgreSQL主发行版本通常会加入新的特性,这些新特性常常会更改系统表的 布局,但是内部数据存储格式很少会改变。pg_upgrade 使用这一事实来通过创建新系统表并且重用旧的用户数据文件来执行快速升级。 - 如果一个未来的主发行没有把数据存储格式改得让旧数据格式不可读取,这类 - 升级就用不上pg_upgrade(社区将尝试避免这类情况)。 + 如果未来的主发行版本更改了数据存储格式,导致旧数据格式不可读,那么 + pg_upgrade将无法用于此类升级。(社区将努力避免这种情况)。 要清理在名为xyzzy的数据库中的一个表foo,并且为优化器分析该表的bar列: -$ vacuumdb --analyze --verbose --table 'foo(bar)' xyzzy +$ vacuumdb --analyze --verbose --table='foo(bar)' xyzzy diff --git a/postgresql/doc/src/sgml/rowtypes.sgml b/postgresql/doc/src/sgml/rowtypes.sgml index 1a23f94b..c1d9f9d0 100644 --- a/postgresql/doc/src/sgml/rowtypes.sgml +++ b/postgresql/doc/src/sgml/rowtypes.sgml @@ -119,7 +119,7 @@ CREATE TABLE on_hand ( INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000); - or functions: + 或函数: CREATE FUNCTION price_extension(inventory_item, integer) RETURNS numeric diff --git a/postgresql/doc/src/sgml/rules.sgml b/postgresql/doc/src/sgml/rules.sgml index f837f882..f27d6482 100644 --- a/postgresql/doc/src/sgml/rules.sgml +++ b/postgresql/doc/src/sgml/rules.sgml @@ -2055,7 +2055,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 在很多情况下,由INSERT/UPDATE/DELETE上的规则执行的任务用触发器能做得更好。触发器在记法上要更复杂些,但是它们的语义理解起来更简单些。当原始查询包含不稳定函数时,规则容易产生令人惊讶的结果:在执行规则的过程中不稳定函数的执行次数可能比语气中的更多。 + 在很多情况下,由INSERT/UPDATE/DELETE上的规则执行的任务用触发器能做得更好。触发器在记法上要更复杂些,但是它们的语义理解起来更简单些。当原始查询包含不稳定函数时,规则容易产生令人惊讶的结果:在执行规则的过程中不稳定函数的执行次数可能比预期中的更多。 ____________________________________________________________________________--> - 在PostgreSQL中有三种隐式类型常量:字符串、位串和数字。常量也可以被指定显示类型,这可以使得它被更精确地展示以及更有效地处理。这些选择将会在后续小节中讨论。 + 在PostgreSQL中有三种隐式类型常量:字符串、位串和数字。常量也可以被指定显式类型,这可以使得它被更精确地展示以及更有效地处理。这些选择将会在后续小节中讨论。 @@ -1619,7 +1619,7 @@ ____________________________________________________________________________--> ____________________________________________________________________________--> - 一段注释是以双斜线开始并且延伸到行结尾的一个字符序列,例如: + 一段注释是以双横杠开始并且延伸到行结尾的一个字符序列,例如: -- This is a standard SQL comment diff --git a/postgresql/doc/src/sgml/test-decoding.sgml b/postgresql/doc/src/sgml/test-decoding.sgml index c1cbbc7d..e75433fb 100644 --- a/postgresql/doc/src/sgml/test-decoding.sgml +++ b/postgresql/doc/src/sgml/test-decoding.sgml @@ -65,7 +65,7 @@ ____________________________________________________________________________--> postgres=# SELECT * FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'include-xids', '0'); - location | xid | data + lsn | xid | data -----------+-----+-------------------------------------------------- 0/16D30F8 | 691 | BEGIN 0/16D32A0 | 691 | table public.data: INSERT: id[int4]:2 data[text]:'arg' diff --git a/tools/add_edit_link.py b/tools/add_edit_link.py index 415fd5a6..c63df846 100644 --- a/tools/add_edit_link.py +++ b/tools/add_edit_link.py @@ -1,72 +1,117 @@ #!/usr/local/python34/bin/python3 # -*- coding: UTF-8 -*- -#功能:在html中添加其他版本链接,在线纠错链接和全文检索框 +#功能:在html中添加其他版本链接,赞助商广告链接,在线纠错链接和全文检索框 import sys import os import re +import argparse sys.path.append(".") import html2sgml_map -patternInsertPos=re.compile(r'.*',re.S) -InsertHTML="""
+InsertHTML2="""
+ +
+""" + +sgmlDir="../build/doc/src/sgml" +htmlDir=os.path.join(sgmlDir,"html") +htmlOutputDir=os.path.join("html_out") +html2sgmlDict=html2sgml_map.getHtml2sgmlDict(sgmlDir) + + +def generate_navigate_bar_HTML(current_version, master_version, all_versions): + html="""
-9.3 -9.4 -9.5 -9.6 -10 -11 +""" + # 添加所有版本的导航连接 + for v in all_versions.split(','): + if v == current_version: + html+='{0}\n'.format(v) + else: + html+='{0}\n'.format(v,v) + + # 添加赞助商广告链接,github在线纠错链接和全文检索框 + if current_version == master_version: + github_branch='master' + else: + github_branch=current_version + html+="""
- +
-""" +""".format(github_branch,current_version) + + return html + + +def process(file, current_version, master_version, all_versions): + filename=os.path.basename(file) + + if current_version in ['9.3','9.4','9.5','9.6']: + patternInsertPos=re.compile(r'.*]*>',re.S) + patternInsertPos2=re.compile(r'.*]*>',re.S) + fin=open(file,"r",encoding='GBK') + content=fin.read() + content=content.replace('CONTENT="text/html; charset=gbk"','CONTENT="text/html; charset=utf-8"') + else: + patternInsertPos=re.compile(r'.*',re.S) + patternInsertPos2=re.compile(r'.*',re.S) + fin=open(file,"r",encoding='UTF-8') + content=fin.read() + fout=open(os.path.join(htmlOutputDir,filename),"w",encoding='UTF-8') + + sgmlfile=html2sgmlDict.get(filename.lower()) + if sgmlfile == None: + print(filename+",no sgml") + print(content,file=fout) + else: + print(filename+","+sgmlfile) + match=patternInsertPos.match(content) + InsertHTML=generate_navigate_bar_HTML(current_version, master_version, all_versions) + print(content[0:match.end()],file=fout) + print(InsertHTML.format(filename,sgmlfile),file=fout) + + match2=patternInsertPos2.match(content) + pos2=match2.end()-len('') + print(content[match.end():pos2],file=fout) + print(InsertHTML2,file=fout) + print(content[pos2:],file=fout) + fin.close() + fout.close() + + +def main(): + argparser = argparse.ArgumentParser(description='add navigate bar to postgres document') + argparser.add_argument('-c', '--current_version', help='current pgdoc version', required=True) + argparser.add_argument('-m', '--master_version', help='pgdoc version for master', required=True) + argparser.add_argument('-a', '--all_versions', help='all pgdoc versions', required=True) + args = argparser.parse_args() + + if not os.path.exists(htmlOutputDir): + os.mkdir(htmlOutputDir) + + # copy stylesheet.css + open(os.path.join(htmlOutputDir,"stylesheet.css"), "wb").write(open(os.path.join(sgmlDir,"stylesheet.css"), "rb").read()) + + for file in os.listdir(htmlDir): + if file.endswith(".html"): + process(os.path.join(htmlDir,file),args.current_version, args.master_version, args.all_versions) -sgmlDir="../build/doc/src/sgml" -htmlDir=os.path.join(sgmlDir,"html") -htmlOutputDir=os.path.join("html_out") -html2sgmlDict=html2sgml_map.getHtml2sgmlDict(sgmlDir) -if not os.path.exists(htmlOutputDir): - os.mkdir(htmlOutputDir) - -# copy stylesheet.css -open(os.path.join(htmlOutputDir,"stylesheet.css"), "wb").write(open(os.path.join(sgmlDir,"stylesheet.css"), "rb").read()) - -def process(file): - filename=os.path.basename(file) - #fin=open(file,"r",encoding='GBK') - fin=open(file,"r",encoding='UTF-8') - fout=open(os.path.join(htmlOutputDir,filename),"w",encoding='UTF-8') - content=fin.read() - #content=content.replace('CONTENT="text/html; charset=gbk"','CONTENT="text/html; charset=utf-8"') - - sgmlfile=html2sgmlDict.get(filename.lower()) - if sgmlfile == None: - print(filename+",no sgml") - print(content,file=fout) - else: - print(filename+","+sgmlfile) - match=patternInsertPos.match(content) - print(content[0:match.end()],file=fout) - print(InsertHTML.format(filename,sgmlfile),file=fout) - print(content[match.end():],file=fout) - fin.close() - fout.close() - -for file in os.listdir(htmlDir): - if file.endswith(".html"): - process(os.path.join(htmlDir,file)) +if __name__ == '__main__': + main() \ No newline at end of file