错误:最后一个预期列之后的额外数据
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 文件的最后一个预期列之后复制错误额外数据