postgres导入csv并自动填充ID并在其上创建和更新

时间:2014-01-24 00:40:02

标签: ruby-on-rails postgresql import auto-populate

我刚刚从sqlite切换到postgresql我的rails应用程序并尝试通过csvs将数据导入数据库。我已经能够很好地导入数据,但是,当我导入csv时,我无法获取id,创建并更新字段以自动填充。我将它们留在csv文件上。有没有办法在导入csv时自动填充这些字段?

1 个答案:

答案 0 :(得分:1)

如果您希望在使用COPY导入时将某些字段设置为默认值,则需要省略COPY命令中的这些字段。

而不是:

COPY tablename FROM 'somefile.csv' FORMAT csv;
你会写:

COPY tablename (col1, col2, col3) FROM 'somefile.csv' FORMAT csv;

完全忽略 CSV数据中的列,而不是将它们留空。 省略列时,它们会自动设置为DEFAULT

不幸的是,PostgreSQL无法忽略输入CSV的列,因此CSV列必须与COPY列表中的列匹配。如果您无法修改CSV输入,则可COPY到具有相同结构的TEMPORARYUNLOGGED表,然后执行INSERT INTO real_target (col1, col2, col3) SELECT col1, col2, col3 FROM the_temp_table;