首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres导入文件,该文件的列由新行分隔。

Postgres导入文件,该文件的列由新行分隔。
EN

Stack Overflow用户
提问于 2013-08-23 04:17:49
回答 3查看 5.1K关注 0票数 2

我有一个大的文本文件,每行有一个列,我想将这个数据文件导入Postgres。

我有一个工作的MySQL脚本。

代码语言:javascript
复制
 LOAD DATA LOCAL 
        INFILE '/Users/Farmor/data.sql' 
        INTO TABLE tablename 
        COLUMNS TERMINATED BY '\n';

我怎样才能把它翻译成Postgres?我试过这个命令。

代码语言:javascript
复制
COPY tablename
    FROM '/Users/Farmor/data.sql' 
    WITH DELIMITER '\n'

然而,它抱怨说:

错误:复制分隔符必须是一个单字节字符。

EN

回答 3

Stack Overflow用户

发布于 2013-08-23 08:39:23

直接的错误是因为\n只是两个字符字符串,\n

你想:

代码语言:javascript
复制
COPY tablename
    FROM '/Users/Farmor/data.sql' 
    WITH DELIMITER E'\n'

E''语法是一个PostgreSQL扩展。

但是,它仍然不能工作,因为PostgreSQL的COPY无法理解带有换行符的文件。我从没见过那种格式。

您需要使用另一个工具加载它并转换CSV。使用办公套件、用于Python的csv模块、用于Perl的Text::CSV等。然后将清理后的CSV输入PostgreSQL。

票数 2
EN

Stack Overflow用户

发布于 2014-09-16 17:24:32

虽然postgresql不会识别\n作为字段分隔符,但最初的问题是如何将行导入为单个列,这可以在postgresql中通过定义数据字符串中找不到的分隔符来实现。例如:

代码语言:javascript
复制
COPY tablename
FROM '/Users/Farmor/data.sql' 
WITH DELIMITER '~';

如果该行中没有找到~,postgresql将将整个行视为一个列。

票数 2
EN

Stack Overflow用户

发布于 2013-08-23 04:35:23

分隔符是两个字符,因此它是一个有效的错误消息。

我认为最简单的方法是修改您要从其中导入的文件,并将分隔符实际更改为\n以外的其他内容,但在您的情况下,这可能不是一个选项。

这个问题解决了同样的问题:ERROR: COPY delimiter must be a single one-byte character

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18394620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档