我有一些非常大的CSV文件,我正在使用Postgres 9.4。我正在使用Postgres's COPY command将它们有效地导入我的数据库。这很好用:
extern
问题是我必须在数据文件之前运行一些转换步骤它们适合COPY。这些包括重新排序字段,将字符串转换为浮点数,转换日期以使它们适合Postgres,以及计算一些值(尽管我可以跳过最后一步):
cursor = conn.cursor()
copy_str = "COPY mytable(presentation_code,quantity,"
copy_str += "processing_date,price_per_unit) FROM STDIN "
copy_str += "WITH DELIMITER AS ','"
file_obj = open(filename)
cursor.copy_expert(copy_str, file_obj)
try:
conn.commit()
except Exception as err:
print 'EXCEPTION:', err
是否有任何Postgres工具可以让我在一个命令中执行这两个步骤(转换,然后COPY)?或者这只是一个必要的步骤?
答案 0 :(得分:2)
您必须将您的trasformation编写为一个程序,将每行从其标准输入中获取到标准输出,然后将其用作copy
命令本身的过滤器。有关详细信息,请参阅副本的手册页(请参阅“程序”部分):http://www.postgresql.org/docs/9.4/static/sql-copy.html。请注意,该程序将作为“postgres”用户运行(如果要从客户端应用程序运行它,可以使用psql的\ copy命令,http://www.postgresql.org/docs/9.4/static/app-psql.html)。