错误:最后一个预期列之后的额外数据

Posted

技术标签:

【中文标题】错误:最后一个预期列之后的额外数据【英文标题】:ERROR: extra data after last expected column 【发布时间】:2016-04-15 04:10:27 【问题描述】:

所以我用这些列创建了这个表:

CREATE TABLE public.gps_0
(
 nmea_sentence text,
 utc_time integer,
 latitude double precision,
 lat_designator character varying(255),
 longitude double precision,
 long_designator character varying(255),
 fix_quality integer,
 num_satellites integer,
 hdop integer,
 altitude double precision,
 alt_units character varying(255),
 geoidal_separation double precision,
 gs_units character varying(255),
 blank integer,
 checksum integer
     )

这是我要导入的 .csv 文件数据:

这就是我之前导入文件所做的:

然后我点击 IMPORT 并收到以下错误消息:

这对我来说毫无意义,因为我的代码有 15 列,我的数据有 15 列。我不知道为什么会出现这个错误,任何帮助都可以。谢谢!

【问题讨论】:

检查文件。从错误中可以看出,它在行的末尾有空列。您需要删除这些。 我已经删除了文件中的空白列,但仍然给我同样的错误......也许这件事超出了我的范围。哈哈哈!我也修改了代码。 在文本编辑器而不是 Excel 中打开 csv 文件(例如 Notepad++ 或 VSCode) - 看看第一行末尾是否有一堆逗号。另外:我认为 Postgres 不会很乐意将 0000*54 视为整数。 【参考方案1】:

这很有可能与文件编码有关。

PostgreSQL 的COPY(这是此导入工具可能使用的)假定的默认编码是 UTF-8,您的文件可能不是。如果它是在 Windows 上创建/编辑/保存的,您可能需要指定不同的编码。

您需要尝试确定文件的编码,不幸的是,这并不总是很简单。有一些工具可以提供帮助,但不能保证为您提供正确的答案。

我在 Python 库 cchardet 上取得了成功——当然这需要在 Python 中进行一些简单的编码。如果你懂一点 Python,在他们的 GitHub 页面上有一个很好的例子:https://github.com/PyYoshi/cChardet

或者,只需搜索一些 Windows 编码检测工具。


确定文件的编码后,您可以在导入工具或COPY 命令中指定它。该工具似乎有一个下拉菜单,这可能会更容易;但是,您可以在此处参考 PostgreSQL 支持的内容:https://www.postgresql.org/docs/current/static/multibyte.html


我已成功使用此方法 - 希望它也能解决您的问题。

【讨论】:

感谢您提及编码问题...我永远猜不到!因此,在我将 CSV 文件专门编码为 UTF-8 之后,它就起作用了!!! :D 非常感谢!!!

以上是关于错误:最后一个预期列之后的额外数据的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 在 SQL Server BCP 文件的最后一个预期列之后复制错误额外数据

HDFS - 最后一个预期列之后的额外数据

最后一个预期列 CSV 之后的 Postgres 额外数据

Postgresql COPY CSV ERROR:最后一个预期列之后的额外数据

GridBagLayout为列提供额外的余量

Jquery 在 DOM .append .after 之后获取更新的表格元素