我有一个rails应用程序,我正在尝试通过PostgreSQL的COPY命令将数据加载到它中。该文件是CSV。该表映射到Rails模型,我需要保留主键ID列,以便我可以使用model.for_each来处理数据 - 该表将有5M +行。
我的问题是,如何构建我的CSV以便我可以将数据加载到表中并仍允许ID列存在?这是一个无赖,因为我需要它的唯一原因是for_each方法。
无论如何,我尝试发送NULL,如:
NULL,col1,col2,col3,col4, etc.
但它不起作用。
感谢。
答案 0 :(得分:3)
无论您为null字符串设置了什么选项,为主键传递null都将无法工作。您将告诉后端将主键设置为null,无论插入的命令是什么,它都将永远不会允许。
我真的不知道保留主键是什么意思。无论做什么,这都将被保留。如果您的意思是让DB为您选择值并且主键是串行(自动增量),则显式命名除主键之外的所有列:
COPY country (colA, colB, colC) FROM '/usr1/proj/bray/sql/country_data'; -- leave out pkey
阅读有关您想要使用的空字符串选项的文档而不是猜测可能的值可能会更快:
答案 1 :(得分:1)
使用WITH CSV时的默认值是不带引号的空字符串,例如:
,col1,col2,col3,,col5
这将创建一个看起来像的记录:
NULL,'col1','col2','col3',NULL,'col5'