Postgres 9.4:COPY与转换步骤?

时间:2015-06-23 13:18:01

标签: postgresql

我有一些非常大的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)?或者这只是一个必要的步骤?

1 个答案:

答案 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)。