Size: a a a

pgsql – PostgreSQL

2020 June 10

YS

Yaroslav Schekin in pgsql – PostgreSQL
Andrey
предлагаете остановить все коннекты, остановить кластер, сделать cp -rp 9.6 9.6.bckp и пробовать pg_upgrade --link?
да, проверял на копии базы на другом сервере
Можно и так. Или (в плане минимизации простоя) можно использовать pg_basebackup + архив WAL (хотя, наверное, при таких объёмах и хороших дисках оно того и не стоит).
А раз проверяли на копии этой базы — это почти наверняка сработает (разве что за это время кто-то выполнил какой-то сильно странный DDL ;) ).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeny S
Всем привет! Есть ли какой-то удобный способ миграции данных руками между базами (master/slave)? Вижу только pg_dump...
Каких данных и зачем?
источник

ES

Evgeny S in pgsql – PostgreSQL
Victor Yegorov
логическая репликация, триггерная репликация
Проекции уже построены между таблицами. Имеется ввиду кейс, когда нужно изменить имеющиеся таблицы, допустим добавить новую колонку. Или добавить новую колонку для репликации в slave. Тогда сначала нужно исторические данные замигрировать...
источник

A

Andrey in pgsql – PostgreSQL
Yaroslav Schekin
Можно и так. Или (в плане минимизации простоя) можно использовать pg_basebackup + архив WAL (хотя, наверное, при таких объёмах и хороших дисках оно того и не стоит).
А раз проверяли на копии этой базы — это почти наверняка сработает (разве что за это время кто-то выполнил какой-то сильно странный DDL ;) ).
если делать полную копию перед pg_upgrade, то можно тогда сразу делать pg_upgrade без ключа --link и тогда будет 2 копии кластера старого и нового
источник

ES

Evgeny S in pgsql – PostgreSQL
Yaroslav Schekin
Каких данных и зачем?
Есть таблица t1 с колонками с1, с2, с3, а также таблица t2 с колонкой c1.

t1 - master, t2 - slave. Спустя время нужно в t2 добавить колонку c2 и синхронизировать ее с имеющимися данными из t1
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Andrey
если делать полную копию перед pg_upgrade, то можно тогда сразу делать pg_upgrade без ключа --link и тогда будет 2 копии кластера старого и нового
Да нет же! Вы же сами написали:

> время простоя ~ до 30 мин, но с ключем --link время простоя до 5 мин,

Если Вы готовы к 30 мин., то да — разницы нет.
Как долго копируется остановленный кластер (cp -r)?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeny S
Проекции уже построены между таблицами. Имеется ввиду кейс, когда нужно изменить имеющиеся таблицы, допустим добавить новую колонку. Или добавить новую колонку для репликации в slave. Тогда сначала нужно исторические данные замигрировать...
> Проекции уже построены между таблицами.

Какие "проекции"? Вы можете подробнее объяснить (что это за механизм, технически)?
источник

A

Andrey in pgsql – PostgreSQL
Yaroslav Schekin
Да нет же! Вы же сами написали:

> время простоя ~ до 30 мин, но с ключем --link время простоя до 5 мин,

Если Вы готовы к 30 мин., то да — разницы нет.
Как долго копируется остановленный кластер (cp -r)?
вот это не замерял, надо будет проверить, если копирование cp -rp  будет меньше 20 мин то можно использовать --link, если больше, то думаю нет смысла использовать --link, а просто запускать pg_upgrade
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Andrey
вот это не замерял, надо будет проверить, если копирование cp -rp  будет меньше 20 мин то можно использовать --link, если больше, то думаю нет смысла использовать --link, а просто запускать pg_upgrade
Тогда, ещё раз: можно использовать pg_basebackup + архив WAL. Это сводит "время копирования" практически к нулю.
источник

ES

Evgeny S in pgsql – PostgreSQL
Yaroslav Schekin
> Проекции уже построены между таблицами.

Какие "проекции"? Вы можете подробнее объяснить (что это за механизм, технически)?
проекция - это настроенная синхронизация двух таблиц в разных базах данных, которые находятся в отношении master-slave

когда надо добавить новое поле в slave, нужно для исторических данных его заполнить значениями из master
источник

AP

Anton Patsev in pgsql – PostgreSQL
источник

ES

Evgeny S in pgsql – PostgreSQL
Yaroslav Schekin
> Проекции уже построены между таблицами.

Какие "проекции"? Вы можете подробнее объяснить (что это за механизм, технически)?
вообще речь не про проекцию, это не на уровне субд сделано.
вопрос в том, как мигрировать данные из одной таблицы в другую
когда одна таблица по схеме является подмножеством другой.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeny S
вообще речь не про проекцию, это не на уровне субд сделано.
вопрос в том, как мигрировать данные из одной таблицы в другую
когда одна таблица по схеме является подмножеством другой.
Я, лично, так ничего и не понял.
Где таблицы, что за master и slave, что за "проекции" — ничего Вы внятно не объяснили, IMHO.
Может, кто-то другой понял и подскажет.
источник

ES

Evgeny S in pgsql – PostgreSQL
Yaroslav Schekin
Я, лично, так ничего и не понял.
Где таблицы, что за master и slave, что за "проекции" — ничего Вы внятно не объяснили, IMHO.
Может, кто-то другой понял и подскажет.
есть таблица db1.table1(f1, f2, f3, f4) - это мастер.
есть таблица db2.table1(f1, f2) - это слейв.

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

вот так мы реплицировали год, а потом поняли, что в слейв нам надо добавить f3 колонку, причем для всех предыдущих записей ее надо смигрировать. как это сделать средствами БД?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeny S
есть таблица db1.table1(f1, f2, f3, f4) - это мастер.
есть таблица db2.table1(f1, f2) - это слейв.

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

вот так мы реплицировали год, а потом поняли, что в слейв нам надо добавить f3 колонку, причем для всех предыдущих записей ее надо смигрировать. как это сделать средствами БД?
> они в разных базах.

Ну так FDW + ALTER + UPDATE, казалось бы... нет?
источник

ES

Evgeny S in pgsql – PostgreSQL
что такое fdw?
источник

R

Roman in pgsql – PostgreSQL
Evgeny S
что такое fdw?
Удаленные источники данных.
источник

R

Roman in pgsql – PostgreSQL
Foreign Data Wrapper
источник

ES

Evgeny S in pgsql – PostgreSQL
Нашел, спасибо!
источник

2_

2flower _ in pgsql – PostgreSQL
Evgeny S
есть таблица db1.table1(f1, f2, f3, f4) - это мастер.
есть таблица db2.table1(f1, f2) - это слейв.

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

вот так мы реплицировали год, а потом поняли, что в слейв нам надо добавить f3 колонку, причем для всех предыдущих записей ее надо смигрировать. как это сделать средствами БД?
если на слейве есть все колонки от мастера, то логическая реплика подходит с ограничениями, иначе работать не будет.
источник