Ответ 1
serial
является более или менее типом столбца, так что integer serial
это как сказать text text
, просто скажите serial
:
CREATE TABLE IF NOT EXISTS "category" (
"id" SERIAL PRIMARY KEY,
"name" varchar(30) DEFAULT NULL
);
Если вы хотите создать последовательность самостоятельно, вы хотите сделать значение по умолчанию id
следующим значением в последовательности, а это значит сказать default nextval('your_seq')
:
CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
"id" integer PRIMARY KEY default nextval('your_seq'),
"name" varchar(30) DEFAULT NULL
);
Чтобы смоделировать обычное поведение serial
, вы также захотите сделать последовательность, принадлежащую таблице:
alter sequence your_seq owned by category.id;
Чтение раздела Serial Types в руководстве может быть плодотворным.
Я бы также рекомендовал, чтобы вы не дважды указывали свои имена таблиц и столбцов, если вам это не нужно. PostgreSQL сбрасывает ваши идентификаторы в нижний регистр, поэтому id
и "id"
будут одинаковыми, но ненужное цитирование - это плохая привычка, которая может легко привести к большому беспорядку кавычек повсюду.