Сбои приращения первичного ключа PostgreSQL в C ++ - PullRequest
2 голосов
/ 14 октября 2011

Каков правильный синтаксис для создания целочисленного автоинкрементного поля первичного ключа в PostgreSQL с использованием C ++?

Я начал с

db->ExecuteSQL("CREATE TABLE mytable (\"mytableid\" INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,

Это компилируется, но процесс завершается с ошибкой, и поле не отображаетсясоздал.

db->ExecuteSQL("CREATE TABLE mytable (\"mytableid\" serial PRIMARY KEY NOT NULL,

Это работает и правильно создает поле.

Нужен ли мне NOT NULL или это не обязательно с serial?
Это лучшеесинтаксис и метод в Postgres для создания поля первичного ключа?

1 Ответ

5 голосов
/ 14 октября 2011

Вам не нужно NOT NULL.Это подразумевается, когда вы определяете столбец PRIMARY KEYS.Согласно документации:

Технически, ограничение первичного ключа - это просто сочетание уникального ограничения и ограничения, не являющегося нулевым.

Кроме того, serial также подразумевает, что NOT NULL .Это не тип данных как таковой, просто удобство обозначений для integer NOT NULL с прикрепленной последовательностью.

Так что это идеальный синтаксис:

CREATE TABLE mytable (mytableid serial PRIMARY KEY);

Вам не нужно заключать в кавычкиимя столбца, если вы не хотите использовать смешанные регистры идентификаторы , зарезервированные слова или "недопустимые" символы.Я бы посоветовал использовать только легальные идентификаторы в нижнем регистре, чтобы сделать ваш код менее подверженным ошибкам (и сделать вашу жизнь проще).

...