Почему при создании таблицы postgresql возникает ошибка «несколько значений по умолчанию»? - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь создать таблицу с этим запросом:

CREATE TABLE "real_estate_static" (
    "uid" SERIAL NOT NULL DEFAULT NEXTVAL("real_estate_uid_seq") PRIMARY KEY,
    "source_id" JSON NOT NULL,
    "source_url" TEXT NOT NULL,
    "created_at" TIMESTAMP NULL DEFAULT NULL,
    "address" TEXT NOT NULL,
    "city" TEXT NOT NULL,
    "state" TEXT NOT NULL,
    "zip" INTEGER NULL DEFAULT NULL,
    "latitude" NUMERIC NULL DEFAULT NULL,
    "longitude" NUMERIC NULL DEFAULT NULL,
    "type" TEXT NOT NULL,
    "category" TEXT NOT NULL,
    "square_ft" NUMERIC NULL DEFAULT NULL,
    "acres" NUMERIC NULL DEFAULT NULL,
    "images" JSON NULL DEFAULT NULL
);

Ошибка:

multiple default values specified for column "uid" of table "real_estate_static"

Я подумал, что, возможно, ошибка из-за параметра NOT NULL, но удаление его ничего не изменилось. Большинство проблем, которые я обнаружил на Inte rnet с такой ошибкой, связаны с Django или другими ORM, но это не мой случай, поэтому я не мог обойти это.

1 Ответ

3 голосов
/ 05 марта 2020

serial не является реальным типом, а псевдонимом, который включает значение по умолчанию.

Из документов ... .

Данные типы smallserial, serial и bigserial не являются истинными типами, а просто удобны для создания столбцов уникальных идентификаторов (аналогично свойству AUTO_INCREMENT, поддерживаемому некоторыми другими базами данных). В текущей реализации указание:

CREATE TABLE tablename (
    colname SERIAL
);

эквивалентно указанию:

CREATE SEQUENCE tablename_colname_seq AS integer;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

Так что все, что nextval и not null не нужно. serial делает это за вас.

"uid" SERIAL PRIMARY KEY,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...