Записи в Мнезии

У меня есть следующая небольшая таблица в базе данных Erlang mnesia. Когда я использую функцию dirty_select следующим образом:

mnesia:dirty_select(user, [{#user{id = '$1', name = martin}, [], ['$1']}]).

Я получаю сообщение об ошибке:

* 1: record user undefined

Таблица пользователей имеет одну строку с идентификатором пользователя в качестве первичного ключа и «мартин» в качестве имени пользователя. Когда я использую следующую команду, она работает хорошо:

mnesia:dirty_read(user, 1).

И результат:

[{user,1,martin}]

В чем может быть причина вышеуказанной ошибки?


person coffeMug    schedule 30.12.2012    source источник


Ответы (1)


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

1> rd(user, {id, name}).
user
2> #user{id=1, name="foo"}.
#user{id = 1,name = "foo"}
3> mnesia:dirty_select(user, [{#user{id = '$1', name = martin}, [], ['$1']}]).
...

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

person butter71    schedule 30.12.2012
comment
вместо определения записей с помощью rd / 2, вы также можете прочитать определения из исходного файла с помощью rf / 1. введите help (). в оболочке для получения дополнительной информации. - person butter71; 31.12.2012
comment
Я думаю, вы имеете в виду rr / 1 для чтения информации о записи из файла! В любом случае, это работает, когда я читаю информацию о записи из файла перед командой выбора, но это единственный способ решить эту проблему? Я имею в виду, нужно ли мне читать информацию о записи каждый раз, когда мне нужно сделать запрос к базе данных? - person coffeMug; 31.12.2012
comment
Нет, вам нужно читать информацию о записи один раз за сеанс оболочки или при ее изменении. - person yetihehe; 31.12.2012