1

我有一个 rails 应用程序,我正在尝试通过 PostgreSQL 的 COPY 命令将数据加载到其中。该文件是 CSV。该表映射到 Rails 模型,我需要保留主键 ID 列,以便我可以使用 model.for_each 来处理数据——该表将有 5M+ 行。

我的问题是,如何构建我的 CSV 以便我可以将数据加载到表中并仍然允许 ID 列存在?这是一个无赖,因为我需要它的唯一原因是 for_each 方法。

无论如何,我尝试发送 NULL,如下所示:

NULL,col1,col2,col3,col4, etc.

但它不起作用。

谢谢。

4

2 回答 2

3

无论您为空字符串设置了什么选项,为主键传递空值都不会起作用。您将告诉后端将主键设置为 null ,无论插入的命令是什么,它都不会允许。

我真的不知道你说的保留主键是什么意思。这是无论如何都会保留的东西。如果您的意思是让数据库为您选择值并且主键是串行(自动增量),那么显式命名除主键之外的所有列:

COPY country (colA, colB, colC) FROM '/usr1/proj/bray/sql/country_data'; -- leave out pkey

阅读有关您想使用哪些空字符串选项而不是猜测可能值的文档也可能会更快:

http://www.postgresql.org/docs/9.0/static/sql-copy.html

于 2011-03-14T21:39:10.863 回答
1

使用 WITH CSV 时的默认值是不带引号的空字符串,例如:

,col1,col2,col3,,col5

这将创建一个如下所示的记录:

NULL,'col1','col2','col3',NULL,'col5'
于 2011-03-14T21:09:27.947 回答