【问题标题】:Copy from file ERROR: invalid input syntax for integer: "1"从文件复制错误:整数的无效输入语法:“1”
【发布时间】:2018-01-14 19:00:17
【问题描述】:

我在 R 中使用 PostgresSQL 10 和 RPostgreSQL 包。

我新建一个表:

CREATE TABLE people (
    id integer NOT NULL,
    name character varying,
    birthdate date,
    deathdate date
);

然后尝试复制文件:

COPY people (id, name, birthdate, deathdate) 
  FROM '\people.sql'
  ENCODING 'UTF-8';

然后得到如下错误:

Error in postgresqlExecStatement(conn, statement, ...) :    RS-DBI
driver: (could not Retrieve the result : ERROR:  invalid input syntax
for integer: "1" CONTEXT:  COPY people, line 1, column id: "1"

我确实想知道这是否是编码错误,所以运行并得到:

readr::guess_encoding("\people.sql")
# A tibble: 4 x 2
      encoding confidence
         <chr>      <dbl>
1        UTF-8       1.00
2 windows-1252       0.37
3 windows-1254       0.37
4 windows-1250       0.28

我尝试了其他不太可能的 windows 编码,但这也不起作用,并且在第 1 行引发了类似的问题,例如 windows-1252 显示 ERROR: invalid input syntax for integer: " 1"

文件的前几行是:

1   50 Cent 1975-07-06  \N
2   A. Michael Baldwin  1963-04-04  \N

最后两行:

8396    Zubaida Sahar   \N  \N
8397    Zuhair Haddad   \N  \N 
\.

知道是什么原因造成的吗?

谢谢

【问题讨论】:

  • 文件中可能有BOM(字节顺序标记)?您可以通过十六进制转储文件并查看前三个字符来检查这一点。
  • 谢谢 - 我已使用 Notepad++ 转换为 UTF-8,以删除任何 BOM。这现在读取文件,但是它抛出“RS-DBI驱动程序:(无法检索结果:错误:复制结束标记损坏上下文:复制人,第8398行”的错误。第8398行是文件的结尾这是\。
  • 新错误还是同一个错误?
  • “RS-DBI 驱动程序:(无法检索结果:错误:复制结束标记损坏上下文:复制人员,第 8398 行”。第 8398 行是文件的结尾,即 \。
  • 也许删除\.

标签: r postgresql psql rpostgresql


【解决方案1】:

感谢 cmets 中的 wildplasser:

1 - 删除字节顺序标记 - 我使用 Notepad++ 并转换为 UTF-8 (see this post)

2 - 完全删除了错误的文件结尾标记

\.

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 2012-12-21
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    相关资源
    最近更新 更多