我正在使用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
命令,该文件在1行中包含3个值。
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
,并且确实可以正常工作。
我不明白为什么它不适用于原始表定义。
答案 0 :(得分:-1)
问题是您已将field_id指定为非null值,因此当文件将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 )
);
您将必须传递一些东西,不能在非null列中传递null