Postgres:自动生成ID

时间:2014-02-11 19:00:58

标签: sql postgresql

目标:让postgres自动生成ID

CREATE TABLE user_privilege (
    id bigint NOT NULL,
    name character varying(255) NOT NULL,
    version integer
);
CREATE TABLE

INSERT INTO user_privilege (name, version) values ('XYZ', 1);

ERROR:  null value in column "id" violates not-null constraint

ALTER TABLE user_privilege ALTER COLUMN id SET DEFAULT nextval('user_privilege_id_seq'::regclass);

ERROR:  relation "user_privilege_id_seq" does not exist

谢谢!

编辑:

我希望将我的id保持为bigint,因为所有其他表的id都为bigint。

2 个答案:

答案 0 :(得分:3)

你需要use either SERIAL or BIGSERIAL,而不是BIGINT。

CREATE TABLE user_privilege (
    id BIGSERIAL NOT NULL,

目前尚不清楚您的表是否具有PRIMARY KEY或UNIQUE约束。但它应该。

答案 1 :(得分:0)

您必须首先创建序列:

CREATE SEQUENCE user_privilege_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

以后可以使用它:

ALTER TABLE ONLY user_privilege ALTER COLUMN id SET DEFAULT nextval('user_privilege_id_seq'::regclass);

这是创建序列documentation