Чат русскоязычного сообщества PostgreSQL, здесь мы обсуждаем технические вопросы, для поиска работы и предложения вакансий есть группа https://t.me/pgsqljobs For English discussion visit https://t.me/pg_sql
👋 Привет, с виду очень простой вопрос.
Нужно сделать Реструктуризацию таблицы, путем создания копии и замены ее на текущую, но как быть с зависимостями. ты не можешь просто так взять и переименовать без решения всех зависимостей. Нет ли какого-то метода замены одной таблицы на другую?
Круто, не знал
Судя по доке это норма(пустое поле srsublsn) :
srsubstate charЧитать полностью…
Код состояния: i = инициализация, d = копирование данных, s = синхронизация выполнена, r = готовность (обычная репликация)
srsublsn pg_lsn
LSN изменения состояния на удалённой стороне, который используются для координации синхронизации в состояниях s или r; в других случаях — null
Я имел в виду скрипт, который создаст подписку при смене роли. Роль меняется, проверяешь что ты мастер, создаёшь подписку. То есть не сам патрони, но и не вручную.
Читать полностью…есть хук, для запуска скрипта при фейловере/свитчовере
on_role_change
Failover logical slots (Alexander Kukushkin)
Make logical replication slots survive failover/switchover on PostgreSQL v11+. The replication slot if copied from the primary to the replica with restart and later the pg_replication_slot_advance() function is used to move it forward. As a result, the slot will already exist before the failover and no events should be lost, but, there is a chance that some events could be delivered more than once.
Вроде оно
Здравствуйте. Patroni каким-то образом поможет с подпиской логической репликации при свитчовере/фейловере или самому пересоздавать на новом мастере?
Читать полностью…Понятно. Тогда я бы всё-таки подумал о том, чтоб на одной из исходных баз таки поменять схему требуемой таблицы, но, чтоб клиентам ничего не менять, создать для неё VIEW в прошлой схеме, как-то так:
ALTER TABLE tbl SET SCHEMA new_schema;
CREATE VIEW old_schema.tbl AS TABLE new_schema.tbl;
А репликация планируется к использованию в кач-ве обеспечения избыточности в данных, или же просто для того чтобы получить доступ к этим "двух базам-источникам" в некой целевой базе (во втором случае, вероятно, можно обойтись просто postgres_fdw, без переливки данных) ?
Читать полностью…А, ну, как-то так (если эта таблице на целевом сервере (далее — реплика) планируется только к чтению):
1. Создаете на реплике таблицу таки с тем же названием как и на исходном сервере — льете туда данные;
2. На эту таблицу создаете VIEW, которым уже пользуются клиенты (с каким угодно названием, и не только).
Соотв., (2) выглядит для клиента как реплицированная таблица но "с другим названием". Таким же образом можно поменять и идентификаторы (имена) столбцов и их типы, если надо.
Когда на целевой таблице даже идентификаторы столбцов/их типы иные, нежели на исходной, что ли?
Читать полностью…Вопрос был именно о маппинге. Но все равно, спасибо
Читать полностью…Реплицировать данные из таблицы с одним именем и схемой в таблицу с отличающимся именем и отличающейся схемой. Структура таблиц идентична
Читать полностью…Всем привет. Есть ли расширения или другие решения для маппинга таблиц при логической репликации ?
Читать полностью…Подскажите пожалуйста, по каким причинам, при создании триггера, может вылезти ошибка 8197. База данных и связи между ними присутствуют-_-
Читать полностью…кажется ничего не нужно, subscription реплицируется физически меж нодами патрони, подписка везде enabled, смущало что на мастере патрони в pg_subscription_rel поле srsublsn пустое, но изменения вроде приходят
Читать полностью…тупо disable/enable? а вообще это нужно делать-то? на реплику ж изменения всяко не применятся
или что-то ещё?
То что вы говорите работает. Интересует в другую сторону. На патрони subscription, на стороннем ПГ publication
Читать полностью…в патрони казалось бы есть функционал по созданию слотов физической репликации после свитчовера. как мне помнится, есть и создание слотов логической репликации в том же месте конфига, хотя тут я уже не уверен, что помню правильно. но будет ли такой слот реплицировать с той же позиции - не знаю, не проверял.
начиная с 17 версии постгреса есть возможность поднятия логической реплики и после промоута слейва в мастер (без патрони), но опять же не разбирался.
то есть в теории можно взять и посмотреть, а нормально ли оно работает.
2й случай. Вариант с fdw рассматривал, но вопрос заключается в сложности запросов. Нет уверенности в том, насколько грамонтно будет строиться план запросов при сложных джойнах нескольких локальных таблиц и внешних таблиц
Читать полностью…К сожалению, не вариант. В рамках общей задачи есть две базы данных, таблицы которых надо реплицировать в разные схемы одной базы данных на другой машине. В двух базах данных источников некоторые комбинации названий схем и таблиц повторяются. Сейчас идёт поиск решения, не предусматривающего изменений структуры в источниках.
Читать полностью…Нет. Просто другое название таблицы, структура таблиц идентична на стороне паблишера и подписчика. Документация описывает условие для логической репликации:
Таблицы публикации сопоставляются с таблицами подписчика по полностью заданным именам таблиц. Репликация в таблицы с другими именами на стороне подписчика не поддерживается.
обычная логическая репликация, если нужна предобработка то https://debezium.io/documentation/reference/stable/connectors/postgresql.html ну или руками писать
Читать полностью…Лишь бы публикуемые столбцы совпадали и там и там (т.е., DDL может вообще не совпадать) — всё остальное, в общем-то, не строго важно.
upd.: У вас это на разных серверах то, или на одном?
Определите, что такое "маппинг" (казалось бы, нечто похожее на искомое прямо подразумевается в рамках самой логической репликации).
Читать полностью…Ну, если Пётр прав про компактность — то 4 штуки bigint или 8 int, все not null, конечно. Все варианты varlena добавят то ли 4 то ли 8 байт на строку.
Впрочем, если главное, что интересует — это компактность — то можэт и зря вы взяли постгрес... Тут на строку довольно большые затраты лишние (байт 30 вроде выходит на индэкс и на служэбные поля). Можно попытаться сэкономить за счёт вариантов column storage от citus или timescale.... Но непросто экономия будет не абсолютная.
Тут возникает вопрос — стоит ли овчинка выделки. Или можэт просто посмотреть во что по дефолту ваша библиотека доступа преобразовывает дефолтный формат этого хэша (скорее всего будет bytea или text) — и не заморачиваясь хранить в нём. Поскольку сейчас место на nvme дешэвле времени программиста.