使用Postgres,我试图AUTO_INCREMENT在SQL中自动编号我的主键.但是,它给了我一个错误.
CREATE TABLE Staff (
ID INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(40) NOT NULL,
PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)
错误:
Run Code Online (Sandbox Code Playgroud)********** Error ********** ERROR: syntax error at or near "AUTO_INCREMENT" SQL state: 42601 Character: 63
知道为什么吗?
我知道使用SERIAL主键的PostgreSQL表最终会有一个由PostgreSQL创建的隐式索引,序列和约束.问题是在重命名表时如何重命名这些隐式对象.下面是我尝试在最后通过具体问题解决这个问题.
给出一个像这样的表
CREATE TABLE foo (
pkey SERIAL PRIMARY KEY,
value INTEGER
);
Run Code Online (Sandbox Code Playgroud)
Postgres输出
CREATE TABLE foo (
pkey serial NOT NULL,
value integer,
CONSTRAINT foo_pkey PRIMARY KEY (pkey )
);
ALTER TABLE foo OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)
PgAdmin III显示以下作为表的DDL
ALTER table foo RENAME TO bar;
Run Code Online (Sandbox Code Playgroud)
现在重命名表
CREATE TABLE bar (
pkey integer NOT NULL DEFAULT nextval('foo_pkey_seq'::regclass),
value integer,
CONSTRAINT foo_pkey PRIMARY KEY (pkey )
);
ALTER TABLE bar OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)
Postgres输出
ALTER SEQUENCE foo_pkey_seq RENAME TO bar_pkey_seq;
Run Code Online (Sandbox Code Playgroud)
表格的PgAdmin III …
在Postgres 9.3表中,我有一个integer主键,自动序列递增,但我达到了最大值integer.如何将其转换integer为serial?
我试过了:
ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint;
Run Code Online (Sandbox Code Playgroud)
但是相同的数据类型不适serial用于bigint.好像我无法转换为serial?