如何将CSV导入已经分配了ID的postgresql?
我有3个CSV文件,每个文件大约150k行。 他们已经在CSV中获得了ID,并且已经在其中保存了assosciations。 是否有一种简单的方法可以跳过id值的自动分配,而是使用CSV中已有的内容?
serial
列默认情况下仅从序列中绘制下一个数字。 如果你给它写了一个值,默认就不会启动。你可以只COPY
到表中( 参见@Saravanan的回答 ),然后相应地更新序列。 一种方法:
SELECT setval('tbl_tbl_id_seq', max(tbl_id)) FROM tbl;
tbl_id
是表tbl
的串行列,从序列tbl_tbl_id_seq
(默认名称)绘制。
在并发加载的情况下,在单个事务中最佳。
注意,这里没有off-by-1错误。 每个文件:
双参数forms将序列的last_value字段设置为指定值,并将其
is_called
字段设置为true,这意味着下一个nextval
将在返回值之前推进序列 。
大胆强调我的。
您可以直接将CSV记录复制到POSTGRES表。
COPY table_name FROM '/path/to/csv' DELIMITER ',' CSV;
通过遵循上述方法,我们实际上可以避免通过ActiveRecord对象创建记录。