Ограничение при использовании 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

Идентификаторы записей обычно создаются платформой. Они должны быть глобально уникальными. Я рекомендую разрешить платформе назначать свои собственные идентификаторы, а не создавать их вручную, поскольку вы, вероятно, столкнетесь с ошибками. Однако ничто не мешает вам делать все, что вы хотите.

Другие вопросы по тегам