簡體   English   中英

使用COPY FROM語句時出現錯誤:列“ field_id”中的空值違反了非空約束

[英]When using COPY FROM statement getting ERROR: null value in column “field_id” violates not-null constraint

我正在使用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的列描述field_idserial ,並且工作正常。

我不明白為什么它不能與原始表定義一起使用。

問題是您已將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM