从text.rpt文件中复制数据到pgadmin中粘贴到postgresql上[英] copy data from a text.rpt file to paste it postgresql in 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'\\'.

我遇到这个问题已经有一段时间了.帮忙?

推荐答案

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

您在 8.1 之后使用 PostgreSQL 并关闭了 standard_conforming_strings - 在 9.1 之前(默认为关闭)或手动关闭它的较新版本.

这会导致字符串中的反斜杠(如 bob\ted)被解释为转义,因此该字符串将是带有文字制表符的 bob<tab>ted,因为 \t 是制表符的转义.

像这样解释字符串违反了 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''.

本文地址:https://www.itbaoku.cn/post/1739740.html