如何将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对象创建记录。