Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Repeatoble read без транзакции.  [new]
DoubleDouchebag
Member

Откуда:
Сообщений: 19
Добрый день!
Есть переливка в виде скрипта на питоне которая на начальном этапе работает так:

В источник на транзакцию, читающую данные из PostgreSQL ставится уровень изоляции repeatable read чтобы читаемые данные были "зафиксированы" на момент начала читающей транзакции.
Это нужно т.к. прочитать за раз нужно данные из нескольких таблиц, а данные в них часто меняются и связаны друг с другом по всякому. Если читать в разных транзакциях то пока один объект прочитаешь в других уже данные новее будут и связи другие и т.д.

Эту переливку нужно реализовать на ETL инструменте который читать данные из нескольких объектов в одной транзакции не умеет.

Вопросы:
1) Можно ли создать условия в PostgreSQL такие как в repeatoble read для нескольких таблиц одновременно. Только без явного открытия транзакции?
Типа команды lock (но она опять же в явно открытой транзакции только работает).
2) Может у кого то был опыт чтения версий данных таблиц на какой то момент времени фиксированный. Направьте где глубже узнать про это.
3) Принципиально другой подход?

Решение в виде базы реплики и остановки репликации на время понятно, но интересно есть ли что полегче.
30 мар 21, 12:56    [22301974]     Ответить | Цитировать Сообщить модератору
 Re: Repeatoble read без транзакции.  [new]
yob
Member

Откуда:
Сообщений: 39
DoubleDouchebag
Добрый день!
Есть переливка в виде скрипта на питоне которая на начальном этапе работает так:

В источник на транзакцию, читающую данные из PostgreSQL ставится уровень изоляции repeatable read чтобы читаемые данные были "зафиксированы" на момент начала читающей транзакции.
Это нужно т.к. прочитать за раз нужно данные из нескольких таблиц, а данные в них часто меняются и связаны друг с другом по всякому. Если читать в разных транзакциях то пока один объект прочитаешь в других уже данные новее будут и связи другие и т.д.

Эту переливку нужно реализовать на ETL инструменте который читать данные из нескольких объектов в одной транзакции не умеет.

Вопросы:
1) Можно ли создать условия в PostgreSQL такие как в repeatoble read для нескольких таблиц одновременно. Только без явного открытия транзакции?
Типа команды lock (но она опять же в явно открытой транзакции только работает).
2) Может у кого то был опыт чтения версий данных таблиц на какой то момент времени фиксированный. Направьте где глубже узнать про это.
3) Принципиально другой подход?

Решение в виде базы реплики и остановки репликации на время понятно, но интересно есть ли что полегче.

1) Уровень изоляции выставляется на уровне всего сервера. Транзакция все равно откроется, исходя из вводных.
2) вариаций может масса - запомнили последнюю бизнес дату на таргете, считали ее, программно ввели нужную дату отсечку, смотря на которую работаем со всеми тремя источниками в виде параметра/процедурно/функционально. Либо считываем parent source / major источник - так же запоминаем и идем в остальные.
Хорошенечко изучите ваше ETL средство
3) непонятно что вы делаете до конца, чтобы подход советовать
30 мар 21, 13:17    [22301984]     Ответить | Цитировать Сообщить модератору
 Re: Repeatoble read без транзакции.  [new]
DoubleDouchebag
Member

Откуда:
Сообщений: 19
yob,

>>3) непонятно что вы делаете до конца, чтобы подход советовать
Нужно просто переделать логику загрузки скриптом на ETL информатики.
30 мар 21, 13:33    [22301998]     Ответить | Цитировать Сообщить модератору
 Re: Repeatoble read без транзакции.  [new]
yob
Member

Откуда:
Сообщений: 39
DoubleDouchebag
yob,

>>3) непонятно что вы делаете до конца, чтобы подход советовать
Нужно просто переделать логику загрузки скриптом на ETL информатики.

ответ выше
31 мар 21, 10:40    [22302368]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить