Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логическая репликация / 25 сообщений из 30, страница 1 из 2
25.06.2018, 11:34
    #39665203
Rinka777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическая репликация
Товарищи аксакалы!
Вопрос по созданию логической репликации.
Что настроить на версии 9.6, учитывая что prod - это физический стендбай причем чужой ?
logical_replication_slot пользовался кто-нибудь?
...
Рейтинг: 0 / 0
25.06.2018, 12:55
    #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
25.06.2018, 13:11
    #39665299
Rinka777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическая репликация
Melkij,

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

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

Да.

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

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

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

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

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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
25.06.2018, 16:28
    #39665442
Rinka777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическая репликация
Maxim Boguk, да написала уже скрипты на сравнение и исправление структуры. Смущает только возможная рассинхронность действий.
...
Рейтинг: 0 / 0
25.06.2018, 17:06
    #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
26.06.2018, 11:08
    #39665825
Rinka777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическая репликация
Maxim Boguk,

скрипт тупо сравнивает метаданные.
реплика не наша, нам ее милостью божьей дают. и на том спасибо. и на том конце идет разработка, что-то меняют, добавляют, это нормально.
...
Рейтинг: 0 / 0
26.06.2018, 11:33
    #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
26.06.2018, 13:29
    #39665979
SeventhSon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическая репликация
автори после
alter sometable add column somecolumn integer;

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

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


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

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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
26.06.2018, 13:46
    #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
26.06.2018, 13:59
    #39666016
SeventhSon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическая репликация
Максим,

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

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

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

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

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

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

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

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

https://github.com/citusdata/cstore_fdw
...
Рейтинг: 0 / 0
27.06.2018, 18:36
    #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
27.06.2018, 21:12
    #39666825
Rinka777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическая репликация
Maxim Boguk,
Спасибо. У меня была благая идея тащить все в вертикальную структуру и потом разворачивать, но это тебе яйца только в профиль.
Есть ещё мысль как быстро и без особых усилий передать ddl, но проверить надо.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логическая репликация / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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