Skip to content

Commit 90a36e9

Browse files
committed
doc: update logical-replication.sgml
1 parent 67bd110 commit 90a36e9

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

postgresql/doc/src/sgml/logical-replication.sgml

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ ____________________________________________________________________________-->
224224
fallback if no other solution is possible. If a replica identity other
225225
than <quote>full</quote> is set on the publisher side, a replica identity
226226
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
228228
how to set the replica identity. If a table without a replica identity is
229229
added to a publication that replicates <command>UPDATE</command>
230230
or <command>DELETE</command> operations then
@@ -234,7 +234,7 @@ ____________________________________________________________________________-->
234234
</para>
235235
____________________________________________________________________________-->
236236
<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>操作都能继续下去。
238238
</para>
239239

240240
<!--==========================orignal english content==========================
@@ -253,7 +253,7 @@ ____________________________________________________________________________-->
253253
</para>
254254
____________________________________________________________________________-->
255255
<para>
256-
Publication通过使用<xref linkend="sql-createpublication"/>命令创建并且可以在之后使用相应的命令进行修改或者删除。
256+
Publication通过使用<link linkend="sql-createpublication"><command>CREATE PUBLICATION</command></link>命令创建并且可以在之后使用相应的命令进行修改或者删除。
257257
</para>
258258

259259
<!--==========================orignal english content==========================
@@ -266,7 +266,7 @@ ____________________________________________________________________________-->
266266
</para>
267267
____________________________________________________________________________-->
268268
<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>操作都是事务性的,因此一旦该事务提交,该表将以正确的快照开始或者停止复制。
270270
</para>
271271
</sect1>
272272

@@ -321,7 +321,7 @@ ____________________________________________________________________________-->
321321
</para>
322322
____________________________________________________________________________-->
323323
<para>
324-
每一个订阅都将通过一个复制槽(见<xref linkend="streaming-replication-slots"/>)接收更改。预先存在的表数据的初始数据同步过程可能会要求额外的临时复制槽
324+
每一个订阅都将通过一个复制槽(见<xref linkend="streaming-replication-slots"/>)接收更改。预先存在的表数据的初始数据同步过程可能会要求额外的复制槽,并且在数据同步结束后删除
325325
</para>
326326

327327
<!--==========================orignal english content==========================
@@ -358,7 +358,7 @@ ____________________________________________________________________________-->
358358
</para>
359359
____________________________________________________________________________-->
360360
<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>删除订阅。
362362
</para>
363363

364364
<!--==========================orignal english content==========================
@@ -479,7 +479,15 @@ ____________________________________________________________________________-->
479479
</para>
480480
____________________________________________________________________________-->
481481
<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>删除订阅时,复制槽也会自动被删除。不过,在一些情况下,有必要单独操纵订阅以及其底层的复制槽。下面是一些场景:
483491

484492
<itemizedlist>
485493
<listitem>
@@ -502,7 +510,7 @@ ____________________________________________________________________________-->
502510

503511
<listitem>
504512
<para>
505-
在删除一个订阅是,远程主机不可达。在这种情况下,可以在尝试删除该订阅之前,使用<command>ALTER SUBSCRIPTION</command>将复制槽解除关联。如果远程数据库实例不再存在,那么不需要进一步的行动。不过,如果远程数据库实例只是不可达,那么复制槽应该被手动删除。否则它将会继续保留WAL并且最终可能会导致磁盘被填满。这种情况应该要仔细地研究。
513+
在删除一个订阅时,远程主机不可达。在这种情况下,可以在尝试删除该订阅之前,使用<command>ALTER SUBSCRIPTION</command>将复制槽解除关联。如果远程数据库实例不再存在,那么不需要进一步的行动。不过,如果远程数据库实例只是不可达,那么复制槽应该被手动删除(以及任何剩余的表同步槽)。否则它将会继续保留WAL并且最终可能会导致磁盘被填满。这种情况应该要仔细地研究。
506514
</para>
507515
</listitem>
508516
</itemizedlist>
@@ -681,7 +689,7 @@ ____________________________________________________________________________-->
681689
<para>
682690
在分区表之间进行复制时,实际的复制来源,缺省情况下,源自发布者上的叶子分区,因此发布者上的分区也必须作为有效的目标表存在于订阅者上。
683691
(它们可以是叶分区本身,也可以是进一步子分区段,甚至可以是独立的表。)
684-
发布还可以指定使用已分区根表的标识和模式来复制更改,而不是使用实际产生更改的各个叶分区的标识和模式(参见<xref linkend="sql-createpublication"/>)。
692+
发布还可以指定使用已分区根表的标识和模式来复制更改,而不是使用实际产生更改的各个叶分区的标识和模式(参见<link linkend="sql-createpublication"><command>CREATE PUBLICATION</command></link>)。
685693
</para>
686694
</listitem>
687695
</itemizedlist>
@@ -771,7 +779,7 @@ ____________________________________________________________________________-->
771779
</para>
772780
____________________________________________________________________________-->
773781
<para>
774-
已有的被订阅表中的初始数据会被快照并且以一种特殊类型的应用进程的并行实例进行拷贝。这种进程将创建自己的临时复制槽并且拷贝现有的数据。一旦现有的数据被拷贝完,工作者会进入到同步模式,主应用进程会流式传递在使用标准逻辑复制拷贝初始数据期间发生的任意改变,这会确保表被带到一种已同步的状态。一旦同步完成,该表的复制的控制权会被交回给主应用进程,其中复制会照常继续。
782+
获取现有订阅表中初始数据的快照并且以一种特殊类型的应用进程的并行实例进行拷贝。这种进程将创建自己的复制槽并且拷贝现有的数据。复制完成后,表内容对其他后端可见。一旦现有的数据被拷贝完,worker进程会进入到同步模式,主应用进程会流式更新在使用标准逻辑复制拷贝初始数据期间发生的任意改变,这会确保表变为已同步的状态。在此同步阶段,应用和提交更改的顺序与它们在发布者发生的顺序相同。一旦同步完成,该表的复制的控制权会被交回给主应用进程,其中复制会照常继续。
775783
</para>
776784
</sect2>
777785
</sect1>
@@ -975,7 +983,7 @@ ____________________________________________________________________________-->
975983
</para>
976984
____________________________________________________________________________-->
977985
<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>中取得工作者槽。
979987
</para>
980988
</sect1>
981989

0 commit comments

Comments
 (0)