如何在PostgreSQL 11.1

时间:2019-04-16 05:20:00

标签: 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)
);

插入查询:

INSERT INTO UserDetail (UserDetailId,UserName, Password) 
  VALUES(1,'admin', 'password');

此处插入查询引发以下错误:

  

无法插入“ userdetailid”列

是否存在任何强制插入到身份列的命令,例如MS SQL:

 SET IDENTITY_INSERT UserDetail ON

让我知道您是否有解决方案。

1 个答案:

答案 0 :(得分:2)

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

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

INSERT INTO UserDetail (UserName, Password) 
  VALUES('admin', 'password');

如果您确实要插入“身份”列,则可以使用GENERATED BY DEFAULT代替GENERATED ALWAYS。在这种情况下,如果您没有为标识列提供值,则Postgres将使用生成的值。

您可以如下使用OVERRIDING SYSTEM VALUE

INSERT INTO UserDetail (UserDetailId,UserName, Password) 
OVERRIDING SYSTEM VALUE 
  VALUES(1,'admin', 'password');