Необходим ли первичный ключ для репликации вставок с использованием pglogical?

Я попытался настроить простую реплику master > slave с помощью pglogical. В справочных документах упоминается, что для репликации обновлений и удалений необходим первичный ключ. Поскольку ни один из них мне не нужен, я настроил набор репликации у провайдера следующим образом:

SELECT pglogical.create_replication_set(
set_name := 'all_remote_tables', 
replicate_insert := true, 
replicate_update := false,
replicate_delete := false,
replicate_truncate := false);

Затем я добавил свою таблицу:

SELECT pglogical.replication_set_add_table(
set_name := 'all_remote_tables',
relation := 'measurements',
synchronize_data := true);

Мой подписчик настроен следующим образом:

SELECT pglogical.create_subscription(
subscription_name := 'testsubscription1',
provider_dsn := 'host=$host port=$port dbname=$dbname user=$user password=$pw', 
replication_sets := array['all_remote_tables'],
synchronize_structure := true,
synchronize_data := true,
forward_origins := '{}');

При такой настройке и раскладке таблицы вот так:

CREATE TABLE "measurements"(    
time        TIMESTAMP WITH TIME ZONE NOT NULL,   
value       NUMERIC,
sensor_id   TEXT);

реплицируется только структура.

Как только я добавлю первичный ключ:

CREATE TABLE "measurements"(            
id          SERIAL PRIMARY KEY, 
time        TIMESTAMP WITH TIME ZONE NOT NULL,   
value       NUMERIC,
sensor_id   TEXT);

все работает как положено.

Поскольку я хочу хранить высокочастотные временные ряды (используя timescaledb) и никогда не буду нуждаться в обновлении / удалении отдельных строк, я не вижу преимуществ первичного ключа здесь. Поэтому я хочу знать, если pglogical не работает без первичных ключей по своему дизайну, или я сделал некоторую неправильную конфигурацию.

Предварительно созданный набор репликации "default_insert_only" работает без какого-либо первичного ключа, но я хочу использовать свои собственные наборы репликации.

Немного оффтопа: вы бы даже порекомендовали использовать pglogical для простых нескольких мастеров> одна подчиненная репликация определенных таблиц (= агрегация)? Так как логическая репликация postgres 10 является частью ядра в любом случае.

1 ответ

Для этого вам не нужен настраиваемый набор репликации, для этого существует предварительно установленный default_insert_only. Проверьте главу "2.4 Наборы репликации" в pglogical docs.

Другие вопросы по тегам