我正在使用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 )
);
你必须传递一些东西,你不能在非空列中传递空