Ограничение при использовании boss_db?
Я пытаюсь использовать boss_db для доступа к pgsql. Таблица должна иметь имя столбца, идентификатор, это должен быть первичный ключ
Тип идентификатора может быть только UUID или последовательным. Это правильно?
Я хочу, чтобы идентификатор был varchar(20), значение идентификатора определяется программой, а не автоматически определяется СУБД. Является ли это возможным?
create table operators(
id serial primary key, /*I want id is varchar(20), is it possible*/
tag_id varchar(20),
name text,
barcode varchar(20),
tel varchar(12),
mobile varchar(20),
email text,
ldap_user_id varchar(20),
operator_barcode varchar(20)
);
A = operator:new(id,"0102030405060708",
"operator_01","B001","12345678",
"13812345678",
"p001@gmail.com",
"ldap001",
"PB001"),
Следующие коды от boss_sql_lib.erl
файл:
infer_type_from_id(Id) when is_list(Id) ->
[Type, TableId] = re:split(Id, "-", [{return, list}, {parts, 2}]),
TypeAtom = list_to_atom(Type),
IdColumn = proplists:get_value(id, boss_record_lib:database_columns(TypeAtom)),
IdValue = case keytype(Type) of
uuid -> TableId;
serial -> list_to_integer(TableId)
end,
{TypeAtom, boss_record_lib:database_table(TypeAtom), IdColumn, IdValue}.
1 ответ
Присвойте идентификатор при создании BossRecord, используя свой собственный идентификатор, а не атом id
:
> AutoId = operator:new(id,
"0102030405060708",
"operator_01","B001","12345678",
"13812345678",
"p001@gmail.com",
"ldap001",
"PB001"),
> ManualID = operator:new("operator-01",
"0102030405060708",
"operator_01","B001","12345678",
"13812345678",
"p001@gmail.com",
"ldap001",
"PB001"),
> AutoID:save(), % will just work
> ManualId:save(). % good luck
Идентификаторы записей обычно создаются платформой. Они должны быть глобально уникальными. Я рекомендую разрешить платформе назначать свои собственные идентификаторы, а не создавать их вручную, поскольку вы, вероятно, столкнетесь с ошибками. Однако ничто не мешает вам делать все, что вы хотите.