Как сохранить буквенно-цифровое значение в целочисленном типе в Postgres? - PullRequest
1 голос
/ 28 февраля 2012

Мне нужно сохранить идентификатор человека в базе данных. Но идентификатор должен содержать одну букву в начале для этого, я следовал следующей вещи,

для столбца идентификатора Я устанавливаю значение по умолчанию, например

create table alphanumeric (id int default ('f'||nextval('seq_test'))::int) ;

Итак, теперь таблица была создана как

default (('f'::text || nextval('seq_test'::regclass)))::integer

После создания таблицы я вставляю значения, которые показывают ошибку, такую ​​как

INSERT INTO alpha VALUES (default) ;
ERROR:  invalid input syntax for integer: "f50" 

Я понял ошибку, но янужен этот тип хранения .....!

Примечания: я не хочу использовать функцию или триггеры.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Просто добавьте еще пару центов к ответу @ muistooshort. Если вы уверены, что требуемые идентификаторы всегда будут соответствовать определенному регулярному выражению, вы можете применить это с ограничением CHECK:

CREATE TABLE alphanumeric (
  id VARCHAR DEFAULT ('f' || nextval('seqtest') PRIMARY KEY,
  ...
  CHECK(id ~ '^[A-Za-z][0-9]+')
);

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

Во-вторых, порядок сортировки, о котором говорит @muistooshort, иногда (смущает) называется «естественной сортировкой», и вы можете получить функцию PostgreSQL для помощи в этом .

2 голосов
/ 28 февраля 2012

Вы хотите использовать строку для id s, поэтому используйте текстовый столбец для id:

create table alphanumeric (
    id text default ('f' || nextval('seq_test'))
)

Если вы используете seq_test только для этого столбца, то вы, вероятно,хотите, чтобы принадлежало этому столбцу :

alter sequence seq_test owned by alphanumeric.id

Таким образом, последовательность будет отброшена, если вы отбросите таблицу, и у вас не будет неиспользуемой последовательности, загромождающей вашу базу данных.

Одна вещь, которую вы могли бы отметить в этой id схеме, состоит в том, что они не будут сортировать так, как их будет сортировать человек;'f100' < 'f2', например, будет истинным, и это может иметь побочные эффекты, которые вам нужно будет обойти.

...