【问题标题】:How to insert CSV data into PostgreSQL database (remote database )如何将 CSV 数据插入 PostgreSQL 数据库(远程数据库)
【发布时间】:2016-01-26 00:56:33
【问题描述】:

我有一个 CSV 文件。如果文件与数据库位于同一服务器上,我可以使用以下命令将数据插入数据库:

psql -h localhost -d local_mydb -U myuser -c "copy mytable (column1, column2)  from '/path/to/local/file.csv' with delimiter as ','"

但是文件在本地服务器上,而数据库在另一个(远程)服务器上。

如果我尝试对远程服务器执行此操作,请使用以下命令:

psql -h remotehost -d remote_mydb -U myuser -c "copy mytable (column1, column2)  from '/path/to/local/file.csv' with delimiter as ','"

我得到一个权限被拒绝的异常。

如何在没有超级用户权限的情况下将本地文件中的数据插入远程服务器上的数据库?

【问题讨论】:

    标签: postgresql csv


    【解决方案1】:

    \copy(注意反斜杠)允许您复制到远程数据库/从远程数据库复制,并且不需要超级用户权限。

    psql -h remotehost -d remote_mydb -U myuser -c "\copy mytable (column1, column2)  from '/path/to/local/file.csv' with delimiter as ','"
    

    如果您使用的是 Java,则可以在 JDBC 驱动程序中使用 CopyManager:https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html

    【讨论】:

    • 我在你和 Schwern 的上面试过了。它工作正常(从控制台)。但是,当我从 Java 代码中尝试这个时,得到“\”语法错误。
    • 请注意\copy is a psql command。它不适用于其他情况。
    • 以防万一它帮助另一个人。如果您收到“列缺失数据...这是因为您忘记指定分隔符。
    • 伟大的工作...:-)
    • 如果数据中有逗号(例如,“123 main st, new york, usa”)with delimiter as ',' 不起作用.. 将其替换为 CSV
    【解决方案2】:

    您可以通过 STDIN 提供文件。来自PostgreSQL COPY documentation...

    当指定 STDIN 或 STDOUT 时,数据通过客户端和服务器之间的连接传输。

    psql -h remotehost -d remote_mydb -U myuser -c \
        "copy mytable (column1, column2) from STDIN with delimiter as ','" \
        < /path/to/local/file.csv
    

    我对使用FROM PROGRAM 的看法不正确。它与FROM 'filename' 有相同的注意事项。服务器执行程序,而不是客户端。

    当指定PROGRAM时,服务器执行给定的命令并从程序的标准输出读取,或写入程序的标准输入。该命令必须从服务器的角度指定,并且可由 PostgreSQL 用户执行。

    【讨论】:

      【解决方案3】:

      对于本地数据库,您只需使用:

      COPY TABLENAME FROM 'D:\xyz.csv' DELIMITER ',' CSV HEADER
      

      对于服务器(远程数据库),您必须添加 \ :

      \COPY TABLENAME FROM 'D:\xyz.csv' DELIMITER ',' CSV HEADER
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-21
        • 2017-06-19
        • 1970-01-01
        • 2016-05-05
        • 1970-01-01
        • 2017-03-16
        • 2014-12-29
        • 2016-11-17
        相关资源
        最近更新 更多