Генерируют уникальный идентификатор строки, используя строку в функциях PostgreSQL

#postgresql #stored-procedures

#postgresql #хранимые процедуры

Вопрос:

Мне нужно сгенерировать уникальный идентификатор на основе другого значения столбца для каждой записи, вставляемой в таблицу.

Допустим, у меня есть таблица EG_TAB (идентификатор, СТРОКА). Идентификатор должен быть сгенерирован на основе СТРОКИ, а также должен удовлетворять приведенным ниже условиям

  1. должно быть уникальным (его уже не должно быть в таблице)
  2. должно быть сгенерировано из входной СТРОКИ.
  3. длина должна составлять 8 символов.
  4. Если СТРОКА состоит из одного слова, то возьмите первые четыре символа и добавьте случайные числа в конец.
  5. Если СТРОКА содержит несколько слов, то возьмите первый символ из каждого слова, затем заполните остальные символы случайными числами.

Возможно ли это в функциях PostgreSQL?

Комментарии:

1. Почему бы просто не использовать последовательность для ID ? Или, если это должно быть что-то «случайное», используйте uuid

2. @a_horse_with_no_name Я не могу использовать sequence или UUID, поскольку идентификатор будет предоставлен пользователям. Чтобы упростить запоминание, идентификатор генерируется на основе пользовательского ввода.

3. Что легче запомнить, чем число?

4. идентификатор @a_horse_with_no_name должен иметь длину 8 символов :-). Будет сложно запомнить число из 8 цифр.

5. create sequence tab_id_seq start with 10000000 maxvalue 99999999