Previously, we had consecutive, very short chapters called "Generic
WAL" and "Custom WAL Resource Managers," explaining different approaches
to the same problem. Merge them into a single chapter. Explain most
of the differences between the approaches in the chapter's
introductory text, rather than in the individual sections.
Discussion: http://postgr.es/m/
46ac50c1-6b2a-404f-a683-
b67af6ab56e9@eisentraut.org
<!-- doc/src/sgml/custom-rmgr.sgml -->
-<chapter id="custom-rmgr">
+<sect1 id="custom-rmgr">
<title>Custom WAL Resource Managers</title>
<para>
- This chapter explains the interface between the core
+ This section explains the interface between the core
<productname>PostgreSQL</productname> system and custom WAL resource
managers, which enable extensions to integrate directly with the <link
linkend="wal"><acronym>WAL</acronym></link>.
An extension, especially a <link linkend="tableam">Table Access
Method</link> or <link linkend="indexam">Index Access Method</link>, may
need to use WAL for recovery, replication, and/or <link
- linkend="logicaldecoding">Logical Decoding</link>. Custom resource managers
- are a more flexible alternative to <link linkend="generic-wal">Generic
- WAL</link> (which does not support logical decoding), but more complex for
- an extension to implement.
+ linkend="logicaldecoding">Logical Decoding</link>.
</para>
<para>
To create a new custom WAL resource manager, first define an
the custom WAL records, which may prevent the server from starting.
</para>
</note>
-</chapter>
+</sect1>
<!ENTITY storage SYSTEM "storage.sgml">
<!ENTITY transaction SYSTEM "xact.sgml">
<!ENTITY tablesample-method SYSTEM "tablesample-method.sgml">
+<!ENTITY wal-for-extensions SYSTEM "wal-for-extensions.sgml">
<!ENTITY generic-wal SYSTEM "generic-wal.sgml">
<!ENTITY custom-rmgr SYSTEM "custom-rmgr.sgml">
<!ENTITY backup-manifest SYSTEM "backup-manifest.sgml">
<!-- doc/src/sgml/generic-wal.sgml -->
-<chapter id="generic-wal">
+<sect1 id="generic-wal">
<title>Generic WAL Records</title>
<para>
Although all built-in WAL-logged modules have their own types of WAL
records, there is also a generic WAL record type, which describes changes
- to pages in a generic way. This is useful for extensions that provide
- custom access methods.
- </para>
-
- <para>
- In comparison with <link linkend="custom-rmgr">Custom WAL Resource
- Managers</link>, Generic WAL is simpler for an extension to implement and
- does not require the extension library to be loaded in order to apply the
- records.
+ to pages in a generic way.
</para>
<note>
</listitem>
</itemizedlist>
</para>
-</chapter>
+</sect1>
&geqo;
&tableam;
&indexam;
- &generic-wal;
- &custom-rmgr;
+ &wal-for-extensions;
&indextypes;
&storage;
&transaction;
--- /dev/null
+<!-- doc/src/sgml/wal-for-extensions.sgml -->
+
+<chapter id="wal-for-extensions">
+ <title>Write Ahead Logging for Extensions</title>
+
+ <para>
+ Certain extensions, principally extensions that implement custom access
+ methods, may need to perform write-ahead logging in order to ensure
+ crash-safety. <productname>PostgreSQL</productname> provides two ways
+ for extensions to achieve this goal.
+ </para>
+
+ <para>
+ First, extensions can choose to use <link linkend="generic-wal">generic
+ WAL</link>, a special type of WAL record which describes changes to pages
+ in a generic way. This method is simple to implement and does not require
+ that an extension library be loaded in order to apply the records. However,
+ generic WAL records will be ignored when performing logical decoding.
+ </para>
+
+ <para>
+ Second, extensions can choose to use a <link linkend="custom-rmgr">custom
+ resource manager</link>. This method is more flexible, supports logical
+ decoding, and can sometimes generate much smaller write-ahead log records
+ than would be possible with generic WAL. However, it is more complex for an
+ extension to implement.
+ </para>
+
+&generic-wal;
+&custom-rmgr;
+
+</chapter>