id serial primary. Эту же таблицу забекапил на слейва, создал публикацию, подписку. Не работает. Убрал на слейве последовательность для поля id - работает. Если же создаю с нуля таблицу на мастере и слейве с типом serial для поля id - все работает. В чем может быть проблема?
Показывай ddl.
Особенно со слейва в "неработающем" варианте.
-- Table: public.operators -- DROP TABLE IF EXISTS public.operators; CREATE TABLE IF NOT EXISTS public.operators ( id integer NOT NULL DEFAULT nextval('operators_id_seq'::regclass), name character varying COLLATE pg_catalog."default", dt_add timestamp without time zone, dt_edit timestamp without time zone, CONSTRAINT operators_pkey PRIMARY KEY (id) ) TABLESPACE pg_default; ALTER TABLE IF EXISTS public.operators OWNER to postgres; таблицы и там и там аналогичны. Может быть проблема в том, что в поле name кириллица?
Через \d+ в psql, и никаких "одинаковы" -- выкладывай поочерёдно оба.
Кирилица не должна зависеть от типа последовательности.
--------------------------СЛЕЙВ------------------------------- Столбец | Тип | Правило сортировки | Допустимость NULL | По умолчанию | Хранилище | Сжатие | Цель для статистики | Описание ---------+-----------------------------+--------------------+-------------------+---------------------------------------+-----------+--------+---------------------+---------- id | integer | | not null | nextval('operators_id_seq'::regclass) | plain | | | name | character varying | | | | extended | | | dt_add | timestamp without time zone | | | | plain | | | dt_edit | timestamp without time zone | | | | plain | | | Индексы: "operators_pkey" PRIMARY KEY, btree (id) Метод доступа: heap --------------------------МАСТЕР------------------------------- Столбец | Тип | Правило сортировки | Допустимость NULL | По умолчанию | Хранилище | Сжатие | Цель для статистики | Описание ---------+-----------------------------+--------------------+-------------------+---------------------------------------+-----------+--------+---------------------+---------- id | integer | | not null | nextval('operators_id_seq'::regclass) | plain | | | name | character varying | | | | extended | | | dt_add | timestamp without time zone | | | | plain | | | dt_edit | timestamp without time zone | | | | plain | | | Индексы: "operators_pkey" PRIMARY KEY, btree (id) Публикации: "ops" Метод доступа: heap
И при этом конфиге -- неработает логическая репликацыя? Вот очищаешь таблицу, создаёшь подписку -- и что в логах?
Не работает. А логи какие, где смотреть?
Постгреса подчинённого в первую очередь.
На ведомом, замечу, sequence и default nextval ни за чем не нужэн, поскольку значения все с ведущего приходят -- но мешать-то не должэн.
2022-06-25 18:09:04.436 EEST [13732] ПРЕДУПРЕЖДЕНИЕ: недостаточно слотов для процессов логической репликации 2022-06-25 18:09:04.436 EEST [13732] ПОДСКАЗКА: Возможно, следует увеличить параметр max_logical_replication_workers. Увеличил max_logical_replication_workers, после перезапуска сервера такие логи: 2022-06-25 18:09:07.396 EEST [6136] ?????: ???? ???? "logical replication worker" (PID 13732) ????? ? ??? ???? 1 2022-06-25 18:09:07.396 EEST [6136] ?????: ???? ???? "logical replication worker" (PID 14900) ????? ? ??? ???? 1 2022-06-25 18:09:07.398 EEST [6136] ?????: ???? ???? "logical replication launcher" (PID 7572) ????? ? ??? ???? 1 2022-06-25 18:09:07.400 EEST [6136] ?????: ???? ???? "logical replication worker" (PID 13632) ????? ? ??? ???? 1 2022-06-25 18:09:07.400 EEST [6136] ?????: ???? ???? "logical replication worker" (PID 12732) ????? ? ??? ???? 1 2022-06-25 18:09:07.403 EEST [7532] ?????: ?????? 2022-06-25 18:09:07.465 EEST [6136] ?????: ???? ?? ??????
Ну, поставьте у обоих серверов lc_messages = 'C', а то вы вообще логи не можэте читать.
та одни логи в utf8, Другие 1251
Мда. Не, ну если хотите проблем внезапных -- то можно и так. Но вообще -- все сервера сейчас надо поднимать в utf8. Особенно людям, которые плохо ориентируются в исходниках postgres.
lc_messages = 'Russian_Russia.1251' # locale for system error message # strings lc_monetary = 'Russian_Russia.1251' # locale for monetary formatting lc_numeric = 'Russian_Russia.1251' # locale for number formatting lc_time = 'Russian_Russia.1251' # locale for time formatting Везде ставить "С"?
lc_messages -- обязательно, lc_numeric -- жэлательно, lc_time можэте оставить, если хочется. И да, это не говорит о том, что там кодировка 1251. Собственно, в виндовой сборке часть про кодировку в локали не используется. А используется -- то ли всегда utf8, то ли кодировка базы при ините. Последнюю смотреть по \l. Если она не-utf8 -- пересоздавайте кластер (ну, или хотя бы базу).
спасибо большое, смотреть логи оказывается помогает решить многие проблемы, заработала реплика. И такой вопрос. Лучше сделать одну репликацию на грубо говоря 10 таблиц или 10 репликаций по каждой на таблицу?
Не знаю, не сравнивал. (Дажэ мысли не было делать несколько репликацый из одной базы).
Обсуждают сегодня