powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логическая репликация
30 сообщений из 30, показаны все 2 страниц
Логическая репликация
    #39665203
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи аксакалы!
Вопрос по созданию логической репликации.
Что настроить на версии 9.6, учитывая что prod - это физический стендбай причем чужой ?
logical_replication_slot пользовался кто-нибудь?
...
Рейтинг: 0 / 0
Логическая репликация
    #39665281
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777физический стендбай
Никак. Logical replication slot - только на мастере, даже если wal_level к вам приезжает уже logical с мастера.
https://github.com/postgres/postgres/blob/REL9_6_STABLE/src/backend/replication/logical/logical.c#L105

Без содействия мастера - только привязываться к пониманию обрабатываемых в предметной области данных. Физическая реплика меняет байтики в датафайлах и не очень заботится над смыслом этих байтиков.
...
Рейтинг: 0 / 0
Логическая репликация
    #39665299
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,

ну то есть либо dblink либо foreign data wrapper ?
...
Рейтинг: 0 / 0
Логическая репликация
    #39665315
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777,

или отдельным приложением.
Но реплика никак не подскажет, что именно изменилось в данных приехавших в wal.
...
Рейтинг: 0 / 0
Логическая репликация
    #39665365
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,
я правильно поняла, что логическая реплика только insert update delete переносит? alter table не переносит?
...
Рейтинг: 0 / 0
Логическая репликация
    #39665371
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777Melkij,
я правильно поняла, что логическая реплика только insert update delete переносит? alter table не переносит?

Да.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39665409
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk, какой ужас.

А 10 postgresql не полегчало?
...
Рейтинг: 0 / 0
Логическая репликация
    #39665424
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777Maxim Boguk, какой ужас.

А 10 postgresql не полегчало?

И не полегчает. Можно или все таблицы с структурой реплицировать на физическом уровне или данные на логическом уровне (но тогда синхронизация структуры - на админах).
В этом нет ничего странного там просто проблема в общем случае неразрешимая (репликация DDL).

Как правило никаких проблем это не устраивает кроме случая очень ленивых DBA и/или отсутствия формализованного процесса внесения изменений в структуру базы.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39665442
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk, да написала уже скрипты на сравнение и исправление структуры. Смущает только возможная рассинхронность действий.
...
Рейтинг: 0 / 0
Логическая репликация
    #39665472
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777Maxim Boguk, да написала уже скрипты на сравнение и исправление структуры. Смущает только возможная рассинхронность действий.


"отсутствия формализованного процесса внесения изменений в структуру базы" - вот это оно и есть.
Откуда и кто мимо DBA может вносить изменения в структуру базы? И почему эти шаловливые ручки не оторвать.
Если у вас логическая или триггерная репликация - все изменения в структуру должны вносится с учетом этого.

Вот внес кто то alter sometable add column somecolumn1 integer default 10;
А потом кто то другой внес
alter sometable add column somecolumn2 integer;
alter sometable alter somecolumn2 set default 10;

Вот как ваш скрипт будет определять какой из 2х вариантов использовался (структура на выходе одна а вот данные в колонках совсем разные будут)?

"написала уже скрипты на сравнение и исправление структуры" - это тупиковый путь, правильный путь - формализация внесения изменений в структуру мастер базы так чтобы нужные куски и на реплику тоже вносились.

PS: а еще есть милейшая конструкция типа
alter table sometable add column SOMECOLUMN default random();
которую никаким внятным методом нельзя отреплицировать кроме как на физическом уровне.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39665825
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

скрипт тупо сравнивает метаданные.
реплика не наша, нам ее милостью божьей дают. и на том спасибо. и на том конце идет разработка, что-то меняют, добавляют, это нормально.
...
Рейтинг: 0 / 0
Логическая репликация
    #39665861
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777Maxim Boguk,

скрипт тупо сравнивает метаданные.
реплика не наша, нам ее милостью божьей дают. и на том спасибо. и на том конце идет разработка, что-то меняют, добавляют, это нормально.

Ну вот я и пишу вам что после:
alter sometable add column somecolumn integer default 10;

и после

alter sometable add column somecolumn integer;
alter sometable alter somecolumn set default 10;

Метаданные строго одинаковы будут, а вот данные в таблице совсем разные будут.
И таких сценариев с метаданными - можно быстро сотню набросать.

Т.е. не будет этот велосипед работать с разумной надежностью.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39665979
SeventhSon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автори после
alter sometable add column somecolumn integer;

выдаст ошибку что somecolumn уже есть.
придётся его дропнуть и ... далее по тексту.
или я чего-то не понимаю?
что же мешает реплицировать DDL? может это просто стереотип мышления? "нельзя, никто так раньше не делал" ;)
...
Рейтинг: 0 / 0
Логическая репликация
    #39665994
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeventhSonавтори после
alter sometable add column somecolumn integer;

выдаст ошибку что somecolumn уже есть.
придётся его дропнуть и ... далее по тексту.
или я чего-то не понимаю?
что же мешает реплицировать DDL? может это просто стереотип мышления? "нельзя, никто так раньше не делал" ;)


Нет я имел в виду что вот эти два варианта команд дают одинаковые метаданные на выходе.
Но совсем разные данные в таблице по итогам выполнения.
И на уровне метаданных отличить одно от другого - не возможно.

Я выше уже написал пример DDL который просто как DDL команду среплицировать невозможно.
Т.е. нельзя просто брать и все DDL пробрасывать на логическую реплику ничем рабочим это не закончится.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39666000
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777Maxim Boguk,

скрипт тупо сравнивает метаданные.
реплика не наша, нам ее милостью божьей дают. и на том спасибо. и на том конце идет разработка, что-то меняют, добавляют, это нормально.

Вот вам еще пример последовательности команд которые вы по сравнению метаданных не разрулите.
Код: plsql
1.
2.
3.
4.
alter table t1 add bigit_id bigint;
update t1 set bigint_id=id+100000000;
alter table t1 drop column id;
alter table t1 rename bigint_id to id;



И расскажите как ваше сравнение метаинформации будет с такими случаями справляться.
А если там оно то работает то нет и надо все время руками смотреть не сломалось ли чего - проще требовать все изменения таблиц соответствующих к вам отправлять (все вносимые DDL на prod) - и вы уже будете смотреть что вносить на вашу реплику.

PS: я еще раз обьясняю что это ОРГАНИЗАЦИОННЫЙ блин вопрос а не технологический.
...
Рейтинг: 0 / 0
Логическая репликация
    #39666016
SeventhSon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим,

а если DDL заложено в архитектуру приложения и никак это не выпилить? ну вот так извратились девелоперы.
мало того, даже create database есть.
разве нельзя последний пример завернуть в одну транзакцию и отправить на реплику как есть, логической командой?
...
Рейтинг: 0 / 0
Логическая репликация
    #39666021
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeventhSon,

поизучайте на досуге про боль и страдания mysql репликации, где что-то подобное пытались изобразить. И получили отменное минное поле вместо надёжного инструмента.
...
Рейтинг: 0 / 0
Логическая репликация
    #39666028
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukВ этом нет ничего странного там просто проблема в общем случае неразрешимая (репликация DDL).
Ну, не всё так страшно, хотя подводных граблей немало. Всё в основном упирается в CDC.
...
Рейтинг: 0 / 0
Логическая репликация
    #39666036
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeventhSonМаксим,

а если DDL заложено в архитектуру приложения и никак это не выпилить? ну вот так извратились девелоперы.
мало того, даже create database есть.
разве нельзя последний пример завернуть в одну транзакцию и отправить на реплику как есть, логической командой?

Логическая репликация в postgresql - это не репликация sql команд с мастера (потому что это не работает) а репликация изменений в конкретных строках конкретной таблицы.
В итоге когда есть каша из DML и DDL - ее и как единую транзакцию не передать и как изменения строк не передать.

Ну и пример - в эту миграцию добавлено еще изменения какой то второй таблицы которой на реплике просто нет (не реплицируется она туда) - как вы предлагаете это на реплике проигрывать?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39666040
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMaxim BogukВ этом нет ничего странного там просто проблема в общем случае неразрешимая (репликация DDL).
Ну, не всё так страшно, хотя подводных граблей немало. Всё в основном упирается в CDC.

Упирается в возможность использования volatile функций в DDL (помимо всего прочего).
Предложите внятый алгоритм репликации вот такого DDL:
alter table sometable add column SOMECOLUMN default random() ;

:)

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39666538
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukПредложите внятый алгоритм репликации вот такого DDL:
alter table sometable add column SOMECOLUMN default random() ;
Ну, это в общем-то зависит от внутренней кухни. Если сервер на эту команду делает неявный "update sometable set SOMECOLUMN=random()", то ничего особенного: реплицируем сначала alter table, а потом изменения, сделанные этим update. Дурная двойная работа, но данные останутся консистентными.
...
Рейтинг: 0 / 0
Логическая репликация
    #39666611
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот такая мысль... в порядке бреда...

есть ли такая функция в postgres которая на лету делает вертикальную структуру? Что-то типа Pivot, Unpivot
можно было бы все это складывать в вертикальную таблицу а потом разворачивать назад. без велосипедов самодельных.

что скажете, опытные товарищи?
...
Рейтинг: 0 / 0
Логическая репликация
    #39666702
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот это кто-нибудь пробовал?

https://github.com/citusdata/cstore_fdw
...
Рейтинг: 0 / 0
Логическая репликация
    #39666783
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777а вот такая мысль... в порядке бреда...

есть ли такая функция в postgres которая на лету делает вертикальную структуру? Что-то типа Pivot, Unpivot
можно было бы все это складывать в вертикальную таблицу а потом разворачивать назад. без велосипедов самодельных.

что скажете, опытные товарищи?

Вам для хранения данных или для отображения надо?
Если для хранения то citus (только он не бесплатный местами).
Если для отображения то https://www.postgresql.org/docs/10/static/tablefunc.html

PS: такие вопросы надо отдельным топиком задавать.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Логическая репликация
    #39666825
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,
Спасибо. У меня была благая идея тащить все в вертикальную структуру и потом разворачивать, но это тебе яйца только в профиль.
Есть ещё мысль как быстро и без особых усилий передать ddl, но проверить надо.
...
Рейтинг: 0 / 0
Логическая репликация
    #39667228
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777...

есть ли такая функция в postgres которая на лету делает вертикальную структуру? Что-то типа Pivot, Unpivot
можно было бы все это складывать в вертикальную таблицу а потом разворачивать назад. без велосипедов самодельных.
...
сборку в еав и взад из еава можно запилить на джейсонах. почти без динамики.
(описатель целевой структуры все равно динамически пошивать приходится)
а в вертикаль примитивно:
запись--шсторе--массивы кеев и валуёв--аннест, как зип,
...
Рейтинг: 0 / 0
Логическая репликация
    #39667311
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в логировании поставить типа пиши все dll , то дальше все в командной строке

tail -f файл лога залинкованный | grep ALTER TABLE | awk меняем TABLE на FOREIGN TABLE | psql нужную строчку в онлайн режиме

пока проверить некогда

да-да-да. логи надо как-то ротировать... но и это можно порешать.
...
Рейтинг: 0 / 0
Логическая репликация
    #39667312
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, а ждаву я, увы, не знаю...
...
Рейтинг: 0 / 0
Логическая репликация
    #39667374
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rinka777,

еав не жаба. жаба не еав.

"еав" -- "ентити--атрибут--валуйе"
-- хранение всего как кучи вертикально.

джейсоны есть в пж. удобны для пивота еавов наличием функции разворота джейсона в таблицу/запись описанной тут же структуры. (т.е. джейсон--агрегат еава разваливаем в плоскость)

т.е. никакой жабы выше не было.
...
Рейтинг: 0 / 0
Логическая репликация
    #39667533
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, почитала. да, это тема, если даже не сюда, то вообще интересно. спасибо!
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логическая репликация
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]