Configuration options
=====================

Some aspects of PGLogical can be configured using configuration options
that can be either set in ``postgresql.conf`` or via
``ALTER SYSTEM SET`` .

-  ``pglogical.conflict_resolution`` Sets the resolution method for any
   detected conflicts between local data and incoming changes.

Possible values:

-  ``error`` - the replication will stop on error if conflict is
   detected and manual action is needed for resolving
-  ``apply_remote`` - always apply the change that’s conflicting with
   local data
-  ``keep_local`` - keep the local version of the data and ignore the
   conflicting change that is coming from the remote node
-  ``last_update_wins`` - the version of data with newest commit
   timestamp will be kept (this can be either local or remote version)
-  ``first_update_wins`` - the version of the data with oldest timestamp
   will be kept (this can be either local or remote version)

The available settings and defaults depend on version of PostgreSQL and
other settings.

The default value in PostgreSQL is ``apply_remote`` .

The ``keep_local`` , ``last_update_wins`` and ``first_update_wins``
settings require ``track_commit_timestamp`` PostgreSQL setting to be
enabled. As ``track_commit_timestamp`` is not available in PostgreSQL
9.4 ``pglogical.conflict_resolution`` can only be ``apply_remote`` or
``error`` .

In Postgres-XL, the only supported value and the default is ``error`` .

-  ``pglogical.conflict_log_level`` Sets the log level for reporting
   detected conflicts when the ``pglogical.conflict_resolution`` is set
   to anything else than ``error`` .

Main use for this setting is to suppress logging of conflicts.

Possible values are same as for ``log_min_messages`` PostgreSQL setting.

The default is ``LOG`` .

-  ``pglogical.batch_inserts`` Tells PGLogical to use batch insert
   mechanism if possible. Batch mechanism uses PostgreSQL internal batch
   insert mode which is also used by ``COPY`` command.

The batch inserts will improve replication performance of transactions
that did many inserts into one table. PGLogical will switch to batch
mode when transaction did more than 5 INSERTs.

It’s only possible to switch to batch mode when there are no
``INSTEAD OF INSERT`` and ``BEFORE INSERT`` triggers on the table and
when there are no defaults with volatile expressions for columns of the
table. Also the batch mode will only work when
``pglogical.conflict_resolution`` is set to ``error`` .

The default is ``true`` .

-  ``pglogical.use_spi`` Tells PGLogical to use SPI interface to form
   actual SQL (``INSERT`` , ``UPDATE`` , ``DELETE`` ) statements to
   apply incoming changes instead of using internal low level interface.

This is mainly useful for Postgres-XL and debugging purposes.

The default in PostgreSQL is ``false`` .

This can be set to ``true`` only when ``pglogical.conflict_resolution``
is set to ``error`` . In this state, conflicts are not detected.

In Postgres-XL the default and only allowed setting is ``true`` .

-  ``pglogical.temp_directory`` Defines system path where to put
   temporary files needed for schema synchronization. This path need to
   exist and be writable by user running Postgres.

Default is empty, which tells PGLogical to use default temporary
directory based on environment and operating system settings.
