@@ -224,7 +224,7 @@ ____________________________________________________________________________-->
224
224
fallback if no other solution is possible. If a replica identity other
225
225
than <quote>full</quote> is set on the publisher side, a replica identity
226
226
comprising the same or fewer columns must also be set on the subscriber
227
- side. See <xref linkend="sql-createtable -replica-identity"/> for details on
227
+ side. See <xref linkend="sql-altertable -replica-identity"/> for details on
228
228
how to set the replica identity. If a table without a replica identity is
229
229
added to a publication that replicates <command>UPDATE</command>
230
230
or <command>DELETE</command> operations then
@@ -234,7 +234,7 @@ ____________________________________________________________________________-->
234
234
</para>
235
235
____________________________________________________________________________-->
236
236
<para>
237
- 为了能够复制<command>UPDATE</command>和<command>DELETE</command>操作,被发布的表必须配置有一个<quote>复制标识</quote>,这样在订阅者那一端才能标识对于更新或删除合适的行。默认情况下,复制标识就是主键(如果有主键)。也可以在复制标识上设置另一个唯一索引(有特定的额外要求)。如果表没有合适的键,那么可以设置成复制标识<quote>full</quote>,它表示整个行都成为那个键。不过,这样做效率很低,只有在没有其他方案的情况下才应该使用。如果在发布者端设置了<quote>full</quote>之外的复制标识,在订阅者端也必须设置一个复制标识,它应该由相同的或者少一些的列组成。如何设置复制标识的细节请参考<xref linkend="sql-createtable -replica-identity"/>。如果在复制<command>UPDATE</command>或<command>DELETE</command>操作的发布中加入了没有复制标识的表,那么订阅者上后续的<command>UPDATE</command>或<command>DELETE</command>操作将导致错误。不管有没有复制标识,<command>INSERT</command>操作都能继续下去。
237
+ 为了能够复制<command>UPDATE</command>和<command>DELETE</command>操作,被发布的表必须配置有一个<quote>复制标识</quote>,这样在订阅者那一端才能标识对于更新或删除合适的行。默认情况下,复制标识就是主键(如果有主键)。也可以在复制标识上设置另一个唯一索引(有特定的额外要求)。如果表没有合适的键,那么可以设置成复制标识<quote>full</quote>,它表示整个行都成为那个键。不过,这样做效率很低,只有在没有其他方案的情况下才应该使用。如果在发布者端设置了<quote>full</quote>之外的复制标识,在订阅者端也必须设置一个复制标识,它应该由相同的或者少一些的列组成。如何设置复制标识的细节请参考<xref linkend="sql-altertable -replica-identity"/>。如果在复制<command>UPDATE</command>或<command>DELETE</command>操作的发布中加入了没有复制标识的表,那么订阅者上后续的<command>UPDATE</command>或<command>DELETE</command>操作将导致错误。不管有没有复制标识,<command>INSERT</command>操作都能继续下去。
238
238
</para>
239
239
240
240
<!--==========================orignal english content==========================
@@ -253,7 +253,7 @@ ____________________________________________________________________________-->
253
253
</para>
254
254
____________________________________________________________________________-->
255
255
<para>
256
- Publication通过使用<xref linkend="sql-createpublication"/ >命令创建并且可以在之后使用相应的命令进行修改或者删除。
256
+ Publication通过使用<link linkend="sql-createpublication"><command>CREATE PUBLICATION</command></link >命令创建并且可以在之后使用相应的命令进行修改或者删除。
257
257
</para>
258
258
259
259
<!--==========================orignal english content==========================
@@ -266,7 +266,7 @@ ____________________________________________________________________________-->
266
266
</para>
267
267
____________________________________________________________________________-->
268
268
<para>
269
- 表可以使用<xref linkend="sql-alterpublication"/ >动态地增加或者移除。<literal>ADD TABLE</literal>以及<literal>DROP TABLE</literal>操作都是事务性的,因此一旦该事务提交,该表将以正确的快照开始或者停止复制。
269
+ 表可以使用<link linkend="sql-alterpublication"><command>ALTER PUBLICATION</command></link >动态地增加或者移除。<literal>ADD TABLE</literal>以及<literal>DROP TABLE</literal>操作都是事务性的,因此一旦该事务提交,该表将以正确的快照开始或者停止复制。
270
270
</para>
271
271
</sect1>
272
272
@@ -321,7 +321,7 @@ ____________________________________________________________________________-->
321
321
</para>
322
322
____________________________________________________________________________-->
323
323
<para>
324
- 每一个订阅都将通过一个复制槽(见<xref linkend="streaming-replication-slots"/>)接收更改。预先存在的表数据的初始数据同步过程可能会要求额外的临时复制槽 。
324
+ 每一个订阅都将通过一个复制槽(见<xref linkend="streaming-replication-slots"/>)接收更改。预先存在的表数据的初始数据同步过程可能会要求额外的复制槽,并且在数据同步结束后删除 。
325
325
</para>
326
326
327
327
<!--==========================orignal english content==========================
@@ -358,7 +358,7 @@ ____________________________________________________________________________-->
358
358
</para>
359
359
____________________________________________________________________________-->
360
360
<para>
361
- 可以使用<xref linkend="sql-createsubscription"/> 增加订阅,并且使用<xref linkend="sql-altersubscription"/> 在任何时刻停止/继续订阅,还可以使用<xref linkend="sql-dropsubscription"/ >删除订阅。
361
+ 可以使用<link linkend="sql-createsubscription"><command>CREATE SUBSCRIPTION</command></link> 增加订阅,并且使用<link linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION</command></link> 在任何时刻停止/继续订阅,还可以使用<link linkend="sql-dropsubscription"><command>DROP SUBSCRIPTION</command></link >删除订阅。
362
362
</para>
363
363
364
364
<!--==========================orignal english content==========================
@@ -479,7 +479,15 @@ ____________________________________________________________________________-->
479
479
</para>
480
480
____________________________________________________________________________-->
481
481
<para>
482
- 如早前所提到的,每一个(活跃的)订阅会从远(发布)端上的一个复制槽接收更改。通常,远程复制槽是在使用<command>CREATE SUBSCRIPTION</command>创建订阅是自动创建的,并且在使用<command>DROP SUBSCRIPTION</command>删除订阅时,复制槽也会自动被删除。不过,在一些情况下,有必要单独操纵订阅以及其底层的复制槽。下面是一些场景:
482
+ 如早前所提到的,每一个(活跃的)订阅会从远(发布)端上的一个复制槽接收更改。
483
+ </para>
484
+ <para>
485
+ 额外的表同步槽通常是临时的,在内部创建以执行初始表同步,并在它们不再被需要时自动删除。这些表同步槽命名为: <quote><literal>pg_%u_sync_%u_%llu</literal></quote>
486
+ (参数是: Subscription <parameter>oid</parameter>,
487
+ Table <parameter>relid</parameter>, system identifier <parameter>sysid</parameter>)
488
+ </para>
489
+ <para>
490
+ 通常,远程复制槽是在使用<command>CREATE SUBSCRIPTION</command>创建订阅是自动创建的,并且在使用<command>DROP SUBSCRIPTION</command>删除订阅时,复制槽也会自动被删除。不过,在一些情况下,有必要单独操纵订阅以及其底层的复制槽。下面是一些场景:
483
491
484
492
<itemizedlist>
485
493
<listitem>
@@ -502,7 +510,7 @@ ____________________________________________________________________________-->
502
510
503
511
<listitem>
504
512
<para>
505
- 在删除一个订阅是 ,远程主机不可达。在这种情况下,可以在尝试删除该订阅之前,使用<command>ALTER SUBSCRIPTION</command>将复制槽解除关联。如果远程数据库实例不再存在,那么不需要进一步的行动。不过,如果远程数据库实例只是不可达,那么复制槽应该被手动删除。否则它将会继续保留WAL并且最终可能会导致磁盘被填满。这种情况应该要仔细地研究。
513
+ 在删除一个订阅时 ,远程主机不可达。在这种情况下,可以在尝试删除该订阅之前,使用<command>ALTER SUBSCRIPTION</command>将复制槽解除关联。如果远程数据库实例不再存在,那么不需要进一步的行动。不过,如果远程数据库实例只是不可达,那么复制槽应该被手动删除(以及任何剩余的表同步槽) 。否则它将会继续保留WAL并且最终可能会导致磁盘被填满。这种情况应该要仔细地研究。
506
514
</para>
507
515
</listitem>
508
516
</itemizedlist>
@@ -681,7 +689,7 @@ ____________________________________________________________________________-->
681
689
<para>
682
690
在分区表之间进行复制时,实际的复制来源,缺省情况下,源自发布者上的叶子分区,因此发布者上的分区也必须作为有效的目标表存在于订阅者上。
683
691
(它们可以是叶分区本身,也可以是进一步子分区段,甚至可以是独立的表。)
684
- 发布还可以指定使用已分区根表的标识和模式来复制更改,而不是使用实际产生更改的各个叶分区的标识和模式(参见<xref linkend="sql-createpublication"/ >)。
692
+ 发布还可以指定使用已分区根表的标识和模式来复制更改,而不是使用实际产生更改的各个叶分区的标识和模式(参见<link linkend="sql-createpublication"><command>CREATE PUBLICATION</command></link >)。
685
693
</para>
686
694
</listitem>
687
695
</itemizedlist>
@@ -771,7 +779,7 @@ ____________________________________________________________________________-->
771
779
</para>
772
780
____________________________________________________________________________-->
773
781
<para>
774
- 已有的被订阅表中的初始数据会被快照并且以一种特殊类型的应用进程的并行实例进行拷贝。这种进程将创建自己的临时复制槽并且拷贝现有的数据。 一旦现有的数据被拷贝完,工作者会进入到同步模式,主应用进程会流式传递在使用标准逻辑复制拷贝初始数据期间发生的任意改变,这会确保表被带到一种已同步的状态 。一旦同步完成,该表的复制的控制权会被交回给主应用进程,其中复制会照常继续。
782
+ 获取现有订阅表中初始数据的快照并且以一种特殊类型的应用进程的并行实例进行拷贝。这种进程将创建自己的复制槽并且拷贝现有的数据。复制完成后,表内容对其他后端可见。 一旦现有的数据被拷贝完,worker进程会进入到同步模式,主应用进程会流式更新在使用标准逻辑复制拷贝初始数据期间发生的任意改变,这会确保表变为已同步的状态。在此同步阶段,应用和提交更改的顺序与它们在发布者发生的顺序相同 。一旦同步完成,该表的复制的控制权会被交回给主应用进程,其中复制会照常继续。
775
783
</para>
776
784
</sect2>
777
785
</sect1>
@@ -975,7 +983,7 @@ ____________________________________________________________________________-->
975
983
</para>
976
984
____________________________________________________________________________-->
977
985
<para>
978
- 订阅者还要求 <varname>max_replication_slots</varname>被设置。在这种情况下,它必须至少被设置为将被加入到该订阅者的订阅数 。<varname>max_logical_replication_workers</varname>必须至少被设置为订阅数加上保留给表同步的连接数。此外,可能需要调整<varname>max_worker_processes</varname>以容纳复制工作者,至少为(<varname>max_logical_replication_workers</varname> + <literal>1</literal>)。注意,一些扩展和并行查询也会从<varname>max_worker_processes</varname>中取得工作者槽。
986
+ 订阅者必须配置 <varname>max_replication_slots</varname>。它必须设置为至少是订阅者数,加上一些用于表同步的预留 。<varname>max_logical_replication_workers</varname>必须至少被设置为订阅数加上保留给表同步的连接数。此外,可能需要调整<varname>max_worker_processes</varname>以容纳复制工作者,至少为(<varname>max_logical_replication_workers</varname> + <literal>1</literal>)。注意,一些扩展和并行查询也会从<varname>max_worker_processes</varname>中取得工作者槽。
979
987
</para>
980
988
</sect1>
981
989
0 commit comments