Using Postgres, I'm trying to use AUTO_INCREMENT
to number my primary key automatically in SQL. However, it gives me an error.
CREATE TABLE Staff (
ID INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(40) NOT NULL,
PRIMARY KEY (ID)
);
The error:
********** Error ********** ERROR: syntax error at or near "AUTO_INCREMENT" SQL state: 42601 Character: 63
Any idea why?
Consider a standard-SQL IDENTITY
column. serial
columns remain unchanged. (See below.) But the former is preferable in modern Postgres. Can be GENERATED BY DEFAULT
or (stricter) GENERATED ALWAYS
.
Basics in the manual for CREATE TABLE
.
Details in this blog entry by its principal author Peter Eisentraut.
IDENTITY
columnCREATE TABLE staff (
staff_id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY
, staff text NOT NULL
);
IDENTITY
column to existing tableTable may or may not be populated with rows.
ALTER TABLE staff ADD COLUMN staff_id int GENERATED ALWAYS AS IDENTITY;
To also make it the PK at the same time (table can't have a PK yet):
ALTER TABLE staff ADD COLUMN staff_id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY;
See:
serial
with IDENTITY
columnSee:
You can override system values or user input in INSERT
commands with OVERRIDING {SYSTEM|USER} VALUE
.
(Still supported in newer versions, too.)
Use the serial
pseudo data type:
CREATE TABLE staff (
staff_id serial PRIMARY KEY,
, staff text NOT NULL
);
It creates and attaches the sequence object automatically and sets the DEFAULT
to nextval()
from the sequence. It does all you need.
I use legal, lower-case, unquoted identifiers in my examples. Makes your life with Postgres easier.