我刚刚从sqlite切换到postgresql我的rails应用程序并尝试通过csvs将数据导入数据库。我已经能够很好地导入数据,但是,当我导入csv时,我无法获取id,创建并更新字段以自动填充。我将它们留在csv文件上。有没有办法在导入csv时自动填充这些字段?
答案 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
到具有相同结构的TEMPORARY
或UNLOGGED
表,然后执行INSERT INTO real_target (col1, col2, col3) SELECT col1, col2, col3 FROM the_temp_table;