185 похожих чатов

Всем доброе утро. Не мог бы кто-нибудь подсказать по такому

вопросу: есть две БД - рабочая и новая. Новая отличается от рабочей только тем, что в ней присутствует одно дополнительное поле в одной из таблиц и нет никаких данных, в остальном всё идентично. Нужно взять все данные из старой БД и переместить в новую. Как лучше правильно организовать передачу данных (мне пришла в голову идея использовать traverse_backup)? И как правильно "достучаться" из текущего узла до другой БД (она просто в виде копии лежит на диске)?

21 ответов

25 просмотров

делай сырой запрос в старую базу на вычитывание всего множества и сохраняй в хорошо организованном подключении к новой базе

Развернуть бэкап и потом добавить поле было бы куда проще

Δημήτηρ- Автор вопроса
Sergei
Развернуть бэкап и потом добавить поле было бы куд...

Было бы проще, если бы механизм создания полей был стандартный, а тут сделано через erlsom (XML)

Δημήτηρ- Автор вопроса
john conor 
делай сырой запрос в старую базу на вычитывание вс...

А как обратиться к новой БД, если у неё нет своей ноды?

Δημήτηρ- Автор вопроса
Sergei
Что мешает воспользоваться шеллом/gui?

Мешает, что этот функционал надо встроить в готовый код для медиашлюза, и работать это должно по принципу "положил на шлюз БД -> запустил -> само всё обновилось".

> Как лучше правильно лучше и правильно зависит от требований (граничных условий)

Δημήτηρ- Автор вопроса
Иванов
> Как лучше правильно лучше и правильно зависит...

Ну, у меня их нет пока, кроме того, чтобы это в принципе работало. Под "правильностью" я имел ввиду чтобы это был не совсем уж говнокод с т.з. того, как пишут на Erl)

Δημήτηρ
Ну, у меня их нет пока, кроме того, чтобы это в пр...

что начит "говнокод" ведь вопрос сводится к переносу данных в новое хранилище? (т.е. обновление структуры методом переноса). я так понял раз вопрос возник значит сервис нельзя останавливать?

Δημήτηρ- Автор вопроса

Нет, приложение останавливать можно, во всяком случае сейчас нет такого требования. А весь кейс возник сугубо из-за того, что текущая версия кода, которая при обновлении структуры БД всё генерирует заново, работает очень долго из-за слабости процессора. Подсунуть готовую пустую БД и перенести данные должно быть намного быстрее.

Δημήτηρ- Автор вопроса
Иванов
что начит "говнокод" ведь вопрос сводится к перено...

Ну, да. Весь вопрос: как, будучи внутри одной ноды, вытянуть все данные из БД ноды и записать данные в БД, которая просто лежит рядом на диске. И всё)

Δημήτηρ
Нет, приложение останавливать можно, во всяком слу...

как тебе идейка: - читать из новой - при отсутствии данных - делать запрос в старую - записывать в новую - удалять из старой - удалить старую при опустении - профит

ну дык напиши функцию которая поле добавит

Δημήτηρ- Автор вопроса
john conor 
ну дык напиши функцию которая поле добавит

Для этого пришлось бы XML парсить, что противоречит самой идее использовать генерацию на основе XML)

Δημήτηρ- Автор вопроса
john conor 
делай сырой запрос в старую базу на вычитывание вс...

Раскройте секрет: как? Я попробовал уже вариантов 5 точно, ни один из них не позволяет просто прочитать все записи без фильтра, даже код из книжки Армстронга

Δημήτηρ- Автор вопроса
Δημήτηρ
Раскройте секрет: как? Я попробовал уже вариантов ...

Если кому интересно, то вот один из рабочих вариантов: read_data() -> TabNames = mnesia:system_info(tables), SelectAll = fun(Tables, Records) -> Handle = fun(_, [], Recs) -> Recs; (Fun, Tabs, Recs) -> [First | Rest] = Tabs, New = mnesia:dirty_select(First, [{'_', [], ['$_']}]), Fun(Fun, Rest, [New | Recs]) end, Handle(Handle, Tables, Records) end, Data = SelectAll(TabNames, []), Data.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта