【问题标题】:Postgres COPY FROM csv file- No such file or directoryPostgres COPY FROM csv file-没有这样的文件或目录
【发布时间】:2013-05-13 04:02:13
【问题描述】:

我正在尝试将一个(相当大的).txt 文件导入到 PostgreSQL 9.1 中的地理名称表中。我在服务器的 /~ 目录中,在该目录中放置了一个名为 US.txt 的文件。我将search_path 变量设置为geochat,即我正在使用的数据库的名称。然后输入以下查询:

COPY geonames
FROM 'US.txt',
DELIMITER E'\t',
NULL 'NULL');

然后我收到此错误:

ERROR: could not open file "US.txt" for reading: No such file or directory.

我必须先输入\i US.txt 或类似的东西,还是应该从当前工作目录中获取?

【问题讨论】:

    标签: postgresql csv import psql tsv


    【解决方案1】:

    可能有点晚了,但希望有用:

    使用 \copy 代替

    https://wiki.postgresql.org/wiki/COPY

    jvdw

    【讨论】:

      【解决方案2】:

      几个误解:

      1.

      我在服务器的 /~ 目录中

      没有目录/~。它是/(根目录)或~(当前用户的主目录)。它也与问题无关。

      2.

      我将 search_path 变量设置为 geochat,我正在使用的数据库的名称

      search_path 与数据库名称无关。它适用于当前数据库中的模式。您可能需要重置它。

      3.
      您需要为您的文件使用绝对路径。如记录的in the manual here

      filename

      输入或输出文件的绝对路径名。

      4.
      分隔符:只是噪音。

      默认是文本格式的制表符

      5.
      NULL:将实际字符串'NULL' 用作NULL 值是相当少见的。你确定吗?

      默认为文本格式的\N(反斜杠-N),CSV 格式的默认空字符串。

      我的猜测(在重置 search_path 之后 - 或者您对表名进行模式限定):

      COPY geonames FROM '/path/to/file/US.txt';
      

      【讨论】:

      【解决方案3】:

      路径相对于 PostgreSQL 服务器,而不是 psql 客户端。

      假设您运行的是 PostgreSQL 9.4,您可以将 US.txt 放在目录 /var/lib/postgresql/9.4/main/ 中。

      【讨论】:

      • 啊,谢谢!这确实解释了“相对”部分!
      【解决方案4】:

      另一种选择是从标准输入管道输入:

      cat US.txt | psql -c "copy geonames from STDIN WITH (FORMAT csv);"
      

      【讨论】:

      • 太棒了。旧的自定义脚本机制停止工作(未找到文件),这成功了,MMD TY
      【解决方案5】:

      如果您是从脚本运行 COPY 命令,则可以在脚本中包含一个步骤,使用正确的绝对路径创建 COPY 命令。

      MYPWD=$(pwd)
      echo "COPY geonames FROM '$MYPWD/US.txt', DELIMITER E'\t';"
      MYPWD=
      

      然后您可以将此部分运行到文件中并执行它

      ./step_to_create_COPY_with_abs_path.sh >COPY_abs_path.sql
      psql -f COPY_abs_path.sql -d your_db_name
      

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多