Column-level conflict detection
===============================

By default, conflicts are resolved at row level. When changes from two
nodes conflict, either the local or remote tuple is selected and the
other is discarded. For example, commit timestamps for the two
conflicting changes might be compared and the newer one kept. This
approach ensures that all nodes converge to the same result and
establishes commit-order-like semantics on the whole cluster.

However, it might sometimes be appropriate to resolve conflicts at the
column level rather than the row level, at least in some cases.

- :ref:`DDL overview <DDL overview>`  introduces column-level conflict resolution in contrast
  to row-level conflict resolution, suggesting where it might be a
  better fit than row-level conflict resolution.

- :ref:`Enabling and disabling column-level conflict resolution <Enabling and disabling column-level conflict resolution>`  provides an example of enabling column-level conflict
  resolution and explains how to list tables with column-level conflict
  resolution enabled.

- :ref:`Timestamps in column-level conflict resolution <Timestamps in column-level conflict resolution>`  explicates the difference between using
  ``column_modify_timestamp`` and ``column_commit_timestamp`` and shows
  how the timestamps associated with column-level conflict resolution
  can be selected and inspected.

.. toctree::
  :maxdepth: 3

  DEEP_DIVE--conflict-management--column-level-conflicts--01_overview_clcd
  DEEP_DIVE--conflict-management--column-level-conflicts--02_enabling_disabling
  DEEP_DIVE--conflict-management--column-level-conflicts--03_timestamps
