0Pricing
Advanced PostgreSQL: Indexing, Partitioning, Replication · Урок

Разрешение конфликтов при логической репликации

Узнайте, как возникают конфликты при логической репликации и какие стратегии PostgreSQL предлагает для их обнаружения и разрешения.

«Разрешение конфликтов при логической репликации» — бесплатный урок Advanced PostgreSQL: Indexing, Partitioning, Replication на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Advanced PostgreSQL: Indexing, Partitioning, Replication, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Advanced PostgreSQL: Indexing, Partitioning, Replication содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Why Conflicts Happen

Unlike physical replication, logical replication applies changes as SQL-level operations on the subscriber. If local data diverges from the incoming change, a conflict occurs and apply stops.

Common Conflict Types

Typical conflicts include:

  • Unique violation — a row with the same key already exists
  • Missing row — an UPDATE or DELETE targets a row not present on the subscriber
  • Type or constraint mismatch

Apply Worker Stalls

When a conflict hits, the subscription's apply worker errors out and retries the same transaction repeatedly, so replication lag grows until you intervene.

Finding the Conflict

The PostgreSQL log records the failing transaction and its LSN. You can also inspect subscription stats.

SELECT subname, last_error_time, last_error_message
FROM pg_stat_subscription_stats;

Resolving by Fixing Data

One option is to make the local data consistent so the change can apply: delete the conflicting row, then let replication retry.

DELETE FROM products WHERE id = 42;
-- the incoming INSERT for id 42 now applies

Skipping a Transaction

If the offending change should be ignored, skip it by LSN. Use this carefully because it abandons that data.

ALTER SUBSCRIPTION my_sub SKIP (lsn = '0/14A0B30');

Disabling on Error

Set the subscription to disable itself on error so it stops retrying and waits for an operator.

ALTER SUBSCRIPTION my_sub SET (disable_on_error = true);

Preventing Conflicts

Reduce conflicts by:

  • Using a single writer per logical dataset
  • Avoiding overlapping primary key ranges across nodes
  • Ensuring the subscriber schema matches the publisher

Replica Identity Matters

UPDATE and DELETE need a replica identity to locate the target row. A table without a primary key needs REPLICA IDENTITY FULL or replication will fail.

ALTER TABLE logs REPLICA IDENTITY FULL;

Monitoring Lag

Watch pg_replication_slots on the publisher; a stalled subscriber holds back WAL and grows the slot, risking disk exhaustion.

SELECT slot_name, active, pg_size_pretty(
  pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn))
FROM pg_replication_slots;

Document a Runbook

Because conflicts need manual judgement, teams keep a runbook: how to identify, whether to fix-data or skip, and how to verify consistency afterward.

Quick Check

An incoming INSERT hits a unique violation on the subscriber. What is the safest resolution?

Recap

You learned how logical replication conflicts arise, how to find them via stats and logs, and how to resolve them by fixing data, skipping an LSN, or using disable_on_error. Proper replica identity and single-writer design prevent most conflicts.

Часто задаваемые вопросы

Урок «Разрешение конфликтов при логической репликации» бесплатный?

Да — полный текст урока «Разрешение конфликтов при логической репликации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Advanced PostgreSQL: Indexing, Partitioning, Replication, подпишись на CoddyKit PRO. Курс Advanced PostgreSQL: Indexing, Partitioning, Replication содержит 4 уроков всего.

Чему я научусь в уроке «Разрешение конфликтов при логической репликации»?

Узнайте, как возникают конфликты при логической репликации и какие стратегии PostgreSQL предлагает для их обнаружения и разрешения. Ты практикуешь Advanced PostgreSQL: Indexing, Partitioning, Replication с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Advanced PostgreSQL: Indexing, Partitioning, Replication?

Предыдущий опыт не требуется. Advanced PostgreSQL: Indexing, Partitioning, Replication на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Разрешение конфликтов при логической репликации»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Advanced PostgreSQL: Indexing, Partitioning, Replication?

Да. Каждый урок Advanced PostgreSQL: Indexing, Partitioning, Replication включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы логической репликации
  2. Настройка публикаций
  3. Управление подписками
  4. Разрешение конфликтов при логической репликации
← Назад к Advanced PostgreSQL: Indexing, Partitioning, Replication