从text.rpt文件中复制数据,将其粘贴到pgadmin中的postgresql中

时间:2014-06-28 10:38:49

标签: postgresql pgadmin

当我跑步时:

COPY con (date,kgs) 
FROM 'H:Sir\\data\\reporting\\hi.rpt'
WITH DELIMITER ','
CSV HEADER 
    date AS 'Datum/Uhrzeit'
    kgs  AS 'Summe'

我收到错误:

WARNING:  nonstandard use of \\ in a string literal
LINE 2: FROM 'H:Sudhir\\Conair data\\TBreporting\\hi.txt'
             ^
HINT:  Use the escape string syntax for backslashes, e.g., E'\\'.

我一直有这个问题。帮助

1 个答案:

答案 0 :(得分:0)

这不是错误,只是一个警告。它与文件内容无关,它与PostgreSQL设置和您正在使用的COPY命令语法有关。

您在关闭standard_conforming_strings之后使用PostgreSQL - 在9.1之前(默认为关闭)或者手动关闭的较新版本。

这会导致字符串中的反斜杠(如bob\ted)被解释为转义符,因此该字符串将为bob<tab>ted并带有文字选项卡,因为\t是选项卡的转义符。< / p>

解释这样的字符串与SQL标准相反,后者没有C风格的反斜杠转义符。多年前,PostgreSQL团队决定改用SQL标准的做事方式。出于向后兼容性原因,它分两个阶段完成:

  • 添加standard_conforming_strings选项以使用字符串的SQL标准解释,但默认为关闭。使用非标准PostgreSQL字符串解释时发出警告。添加新的E'string'样式以允许应用程序显式请求字符串中的转义处理。

  • 稍后发布一些版本,默认情况下启用standard_conforming_strings,一旦人们更新并修复了应用程序生成的警告。据说。

\的转义为\\。因此,像你(或你正在使用的工具)那样“加倍”反斜杠是正确的。 PostgreSQL正在显示一个警告,因为它不知道你写H:Sir\\data\\reporting\\hi.rpt的时候你的意思是H:Sir\\data\\reporting\\hi.rpt(就像SQL规范所说的那样)或H:Sir\data\reporting\hi.rpt(就像PostgreSQL过去那样,反对标准)。

因此您的查询没有任何问题。如果您要删除警告,请启用standard_conforming_strings,或在字符串中添加明确的E''