如何在 PostgreSQL 11.1 中向标识列插入值

Nay*_*ani 7 database postgresql

我想将我自己的值插入到身份列中。

表架构:

CREATE TABLE public.userdetail (
    userdetailid int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
    username varchar(30) NOT NULL,
    "password" varchar(1000) NOT NULL,
    CONSTRAINT pk_userdetail PRIMARY KEY (userdetailid)
);
Run Code Online (Sandbox Code Playgroud)

插入查询:

INSERT INTO UserDetail (UserDetailId,UserName, Password) 
  VALUES(1,'admin', 'password');
Run Code Online (Sandbox Code Playgroud)

这里插入查询抛出以下错误:

无法插入“userdetailid”列

是否有任何命令可以强制插入到身份列,如 MS SQL:

 SET IDENTITY_INSERT UserDetail ON
Run Code Online (Sandbox Code Playgroud)

如果您有任何解决方案,请告诉我。

Fat*_*n P 15

GENERATED ALWAYS告诉 Postgres 总是为标识列生成值。如果您尝试在这样的列中插入值,Postgres 将抛出错误。

如果要插入,可以使用以下查询

INSERT INTO UserDetail (UserName, Password) 
  VALUES('admin', 'password');
Run Code Online (Sandbox Code Playgroud)

如果你真的想插入到标识列,你可以使用GENERATED BY DEFAULT代替GENERATED ALWAYS。在这种情况下,如果您没有为标识列提供值,Postgres 将使用生成的值。

或者

您可以使用OVERRIDING SYSTEM VALUE如下所示

INSERT INTO UserDetail (UserDetailId,UserName, Password) 
OVERRIDING SYSTEM VALUE 
  VALUES(1,'admin', 'password');
Run Code Online (Sandbox Code Playgroud)

  • 请注意,将显式值插入自动递增字段不会更新 Postgres 用于为该字段生成新值的序列,如果您在插入值后不手动更新序列,则可能会在以后引起冲突明确地。有关更新 autoinc 序列的信息,请参阅[另一个问题](/sf/ask/637618341/)。 (3认同)