从csv的psql复制自动生成ID

时间:2019-08-13 14:11:19

标签: postgresql psql

考虑一下这样创建的表:

CREATE TABLE public.test
(
    id integer NOT NULL DEFAULT nextval('user_id_seq'::regclass),
    name text,
    PRIMARY KEY (id)
)

因此该表具有唯一的“ id”列,该列会使用序列自动生成默认值。

现在,我希望从csv文件导入数据,以扩展此表。但是,“显然” id必须是唯一的,因此我希望让数据库本身生成ID,csv文件本身(来自完全不同的来源)因此为id提供了“空列”:

,username
,username2

但是如果我随后使用psql导入此csv:

\copy public."user" FROM '/home/paul/Downloads/test.csv' WITH (FORMAT csv);

弹出以下错误:

ERROR:  null value in column "id" violates not-null constraint

那我该怎么做?

1 个答案:

答案 0 :(得分:0)

CSV文件中的空列被解释为SQL NULL,插入该值将覆盖DEFAULT并导致错误。

您应该忽略文件中的空白列,并使用:

\copy public."user"(name) FROM '...' (FORMAT 'csv')

然后默认值将用于id