首页 文章

PostgreSQL:创建一个.sql文件,以最快的方式将数据插入表中

提问于
浏览
0

我正在开发一个项目,我必须解析一堆.csv文件,所有不同的格式,并通过一些C函数包含不同类型的数据 . 之后,我从文件中提取数据并创建一个.sql文件,该文件可以在psql中导入,以便在稍后阶段将数据插入PostgreSQL数据库 .

但我无法弄清楚.sql文件的正确语法 . 这是一个示例表和一个示例.sql文件,重现了我得到的相同错误:

表格创建代码:

CREATE TABLE "Sample_Table"
(
  "Col_ID" integer NOT NULL,
  "Col_Message" character varying(50),
  CONSTRAINT "Sample_Table_pkey" PRIMARY KEY ("Col_ID" )
)

insertion.sql(在复制行之后,由单个制表符分隔的字段)

copy Sample_Table (Col_ID, Col_Message) from stdin;
1   This is Spaaarta
2   Why So Serious
3   Baazinga
\.

现在,如果我执行上面的sql文件,我会收到以下错误:

ERROR:  syntax error at or near "1"
LINE 2: 1 This is Spaaarta
        ^


********** Error **********

如果它可以提供帮助,我正在运行PostgreSQL 9.1版本,所有上述查询都是通过PGAdmin III软件执行的 .

2 回答

  • 1

    PgAdmin不支持以与psql相同的方式执行COPY命令(或者至少,它不是我最后一次尝试使用版本1.14时) . 使用psql执行脚本,或使用INSERT语句 .

  • 1

    要检查的三件事:

    • 列之间实际上只有一个制表符吗?空间是不行的 .

    • 是否有更多错误消息?我至少缺少一个 . (见下文)

    • 当您强制区分大小写的表和列名称时,必须执行此操作 . 因此你必须这样写:

    copy "Sample_Table" ("Col_ID", "Col_Message") from stdin;

    否则你会得到theese的错误:

    psql:x.sql:1: ERROR:  relation "sample_table" does not exist
    psql:x.sql:5: invalid command \.
    psql:x.sql:5: ERROR:  syntax error at or near "1"
    LINE 1: 1 This is Spaaarta
            ^
    

    有了这些东西,我就可以成功使用您的示例数据 .

    EDIT 错误更改:提问者现在有

    ERROR: invalid input syntax for integer: "1 'This is Spaaarta'"
    

    所以 1 的东西不行 .

    我的猜测是,这是一个编码问题 . 带有UTF-16的Windows可能是这里的罪魁祸首 .

    调试其他网络上的这类问题并不容易,因为许多半智能程序都在线上,大多数都喜欢调整“少数”的东西 .

    但首先检查psql中的一些内容:

    \encoding
    show client_encoding;
    show server_encoding;
    

    根据pastebin数据,它们应该是相同的,并且是“SQL_ASCII”,“LATIN1”或“UTF-8”之一 .

    如果它们已经存在或调整它们没有帮助:Unix / Linux / cygwin有一个 hexdump -C x.sql 程序,将其输出发布到pastebin . 不要使用任何Windows编辑器(如ultraedit)中的hexdump - 他们已经多次骗过我 . 将文件传输到Linux时,请务必使用二进制传输 .

相关问题