使用 COPY FROM 语句时出现错误:列 "field_id" 中的空值违反了非空约束



我正在使用COPY FROM命令从文件加载数据。 该表是使用标识列定义的,标识列不是文件的一部分。

CREATE TABLE APP2DBMAP ( 
FIELD_ID             integer  NOT NULL GENERATED BY DEFAULT AS IDENTITY,
FIELD_NAME           varchar(128)   ,
TABLE_NAME           varchar(128)   ,
COLUMN_NAME          varchar(128)   ,
CONSTRAINT PK_APP2DBMAP PRIMARY KEY ( FIELD_ID )
);

我执行了以下COPY FROM命令,该文件在 3 行中包含 1 个值。

copy app2dbmap (field_name, table_name, column_name) from '/opt/NetMgr/data/templ_db.txt' DELIMITER ',' ;

我收到以下错误:

ERROR:  null value in column "field_id" violates not-null constraint
DETAIL:  Failing row contains (null, 'aaa', 'bbb', 'ccc').
CONTEXT:  COPY app2dbmap, line 1: "'aaa','bbb','ccc'"

我尝试将field_id的列描述更改为serial,它确实工作正常。

我不明白为什么它不适用于原始表定义。

问题是您已将field_id指定为非空值,因此当文件将 null 作为值传递时,您的错误就在那里。 如果需要自动递增 ID,请使用,

CREATE TABLE APP2DBMAP ( 
FIELD_ID             smallserial  NOT NULL,
FIELD_NAME           varchar(128)   ,
TABLE_NAME           varchar(128)   ,
COLUMN_NAME          varchar(128)   ,
CONSTRAINT PK_APP2DBMAP PRIMARY KEY ( FIELD_ID )
);

你也可以使用 bigserial(int4( 代替 smallint(int8(

或者你可以给出一个默认值,

CREATE TABLE APP2DBMAP ( 
FIELD_ID             integer NOT NULL default 0,
FIELD_NAME           varchar(128)   ,
TABLE_NAME           varchar(128)   ,
COLUMN_NAME          varchar(128)   ,
CONSTRAINT PK_APP2DBMAP PRIMARY KEY ( FIELD_ID )
);

你必须传递一些东西,你不能在非空列中传递空

最新更新