我已经创建了我的第一个 postgres 表,我正在尝试弄清楚如何将 .csv 文件复制到表中,同时在第 1 列(ID)中生成一个序列号,该序列号从数字 1 开始并向上计数(即每行 1、2、3 等)。我一直在使用命令:
COPY sales_table FROM '/home/perl_experiments/xmlcsv.txt' (DELIMITER('|'));
这尝试复制 csv 的内容,但它似乎将 .csv 中的第一列数据放入表的第一列中。我已将表的第一列指定为 bigserial,并且假设该列会自动填充,而 csv 的内容将绕过第 1 列并开始从第 2 列填充表。显然情况并非如此,我有错过了至关重要的一步。有人能阐明我错过的步骤吗?以下是我创建的表的摘要:
Column Type Not Null Default
ID bigint NOT NULL nextval('"sales_table_Entry Id_seq"'::regclass) [pk]
ProdNo bigint
Title character varying
url character varying
Price integer
答案1
您可以指定要填写COPY
命令的各个列:
COPY table_name [ ( column [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
(http://www.postgresql.org/docs/9.1/static/sql-copy.html)
因此,请在 中明确指定 CSV 列COPY
,而忽略 bigserials 列。