我想将csv文件导入到从csv文件的第9行开始的表中。如何在postgresql中指定这个条件?
前8行有一堆不相关的文字描述下面的数据。这是导入Excel的文件的屏幕截图。
这是我的数据库中的表我试图将数据插入。
CREATE TABLE trader.weather
(
station text NOT NULL,
"timestamp" timestamp with time zone NOT NULL,
temp numeric(6,2),
wind numeric(6,2)
)
答案 0 :(得分:1)
可以 使用Postgres完成,而不是直接使用COPY
。
使用这样的临时登台表:
CREATE TEMP TABLE target_tmp AS
TABLE target_tbl LIMIT 0; -- create temp table with same columns as target table
COPY target_tmp FROM '/absolute/path/to/file' (FORMAT csv);
INSERT INTO target_tbl
TABLE target_tmp
OFFSET 8; -- start with line 9
DROP TABLE target_tmp; -- optional, else it's dropped at end of session automatically
跳过的行也必须有效。
显然,这种情况更为昂贵 - 对于中小型桌子而言,这一点并不重要。与大桌子有关系。那么你真的应该在导入之前修剪输入文件中的剩余行。
确保您的temp_buffers
设置足以容纳临时表,以最大限度地降低性能损失。
相关(包含没有超级用户权限的\copy
的说明):
答案 1 :(得分:0)
不能在PostgreSQL上完成,你应该在postgres之前使用外部工具或进程来完成。
根据手册,您可以对CSV执行的唯一处理大多是QUOTE
或NULL
相关:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column_name [, ...] ] ] ]
COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
TO { 'filename' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE QUOTE { column_name [, ...] | * } ] ] ]
在PostgreSQL中使用CSV之前,有很多方法可以自动更改CSV,你应该检查其他选项。