Как добавить столбец ко всем подключенным узлам - таблица мнезий - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь добавить новый столбец в существующую таблицу мнезий. Для этого я использую следующий код.

test()->

Transformer =
  fun(X)-> % when is_record(X, user) -> %previous users
      #userss{name = X#user.name,
           age = X#user.age,
           email = X#user.email,
          year = 1990}
end,
AF = mnesia:transform_table(user, Transformer,record_info(fields, userss),userss),

 mnesia:sync_transaction(AF).

Две записи у меня

-record(user,{name,age,email}).
-record(users,{name,age,email,year}).

Я хочу обновить все таблицы подключенных узлов. Но это не удается.

{aborted,{badarg,{aborted,{"Bad transform function",user,
                           #Fun<test.2.61379004>,'otherserver@192.168.169.1',
                           {badfun,#Fun<test.2.61379004>}}},
                 [],infinity,mnesia}}

В чем здесь проблема?

1 Ответ

0 голосов
/ 12 ноября 2018

Проблема в том, что анонимная функция может быть вызвана только на узлах, где модуль, который ее определяет, загружен.Я предполагаю, что вы загрузили модуль, содержащий функцию test, только на одном узле в кластере - вам нужно загрузить его на всех узлах, чтобы это работало.Для этого вы можете использовать команду nl («загрузка по сети») вместо l в оболочке Erlang:

nl(my_module).

nl, а другие команды описаны здесь .

...