</para>
</sect1>
+ <sect1 id="logical-replication-restrictions">
+ <title>Restrictions</title>
+
+ <para>
+ Logical replication currently has the following restrictions or missing
+ functionality. These might be addressed in future releases.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ The database schema and DDL commands are not replicated. The initial
+ schema can be copied by hand using <literal>pg_dump
+ --schema-only</literal>. Subsequent schema changes would need to be kept
+ in sync manually. (Note, however, that there is no need for the schemas
+ to be absolutely the same on both sides.) Logical replication is robust
+ when schema definitions change in a live database: When the schema is
+ changed on the publisher and replicated data starts arriving at the
+ subscriber but does not fit into the table schema, replication will error
+ until the schema is updated. In many cases, intermittent errors can be
+ avoided by applying additive schema changes to the subscriber first.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Sequence data is not replicated. The data in serial or identity columns
+ backed by sequences will of course be replicated as part of the table,
+ but the sequence itself would still show the start value on the
+ subscriber. If the subscriber is used as a read-only database, then this
+ should typically not be a problem. If, however, some kind of switchover
+ or failover to the subscriber database is intended, then the sequences
+ would need to be updated to the latest values, either by copying the
+ current data from the publisher (perhaps
+ using <command>pg_dump</command>) or by determining a sufficiently high
+ value from the tables themselves.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <command>TRUNCATE</command> commands are not replicated. This can, of
+ course, be worked around by using <command>DELETE</command> instead. To
+ avoid accidental <command>TRUNCATE</command> invocations, you can revoke
+ the <literal>TRUNCATE</literal> privilege from tables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Large objects (see <xref linkend="largeobjects">) are not replicated.
+ There is no workaround for that, other than storing data in normal
+ tables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Replication is only possible from base tables to base tables. That is,
+ the tables on the publication and on the subscription side must be normal
+ tables, not views, materialized views, partition root tables, or foreign
+ tables. In the case of partitions, you can therefore replicate a
+ partition hierarchy one-to-one, but you cannot currently replicate to a
+ differently partitioned setup. Attempts to replicate tables other than
+ base tables will result in an error.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
<sect1 id="logical-replication-architecture">
<title>Architecture</title>