我的表格中的一列包含带有'\ n'的字符串。
postgres=# COPY (select * from stringtest) TO STDOUT WITH DELIMITER E'\t' ;
1 Name : NOC\r\n\r\nDetail : Detail
但是当我使用COPY TO检索同一个表时,新行字符将被转义
postgres=# COPY (select * from stringtest) TO STDOUT WITH DELIMITER E'\t' ;
1 Name : NOC\r
\r
Detail : Detail
如何让COPY TO命令用新行替换'\ n'?
预期产出:
for i in D:\Test\*\*.jpg; do convert -strip -interlace Plane -quality 80 $i $i; done
如何实现这个?
答案 0 :(得分:1)
您可以使用以下两种文字格式:
我相信,对于第一种格式(您使用的格式),每条逻辑行也是一条物理线,这意味着没有任何方法可以绕过文字' \ n'。但是,如果使用CSV选项,则可以使用嵌入的换行符引用字符串:
test=# copy (select * from stringtest) to stdout csv;
1,"line one
linetwo"
不是100%的预期输出,但如果CSV对你来说没问题 - 这就行了。
使用制表符分隔符:
test=# copy (select * from stringtest) to stdout csv delimiter E'\t';
1 "line one
linetwo"
答案 1 :(得分:1)
您需要评估转义。像这样的东西会起作用
echo -e "`psql -c "COPY stringtest TO STDOUT WITH DELIMITER E'\t' ;"`"
这是正确引用的,所以你不会有空格粉碎。注意:它将评估所有逃逸而不仅仅是'\ n'
对于反向操作COPY ... FROM stdin ...
只需在换行符之前添加反斜杠即可。对于选项卡或您选择的任何分隔符,也可以这样做。
如果您直接在终端输入或运行文件\
postgres=# COPY stringtest FROM stdin WITH DELIMITER E'\t' ;
>>Name : NOC\r\
>>\r\
>>Detail : Detail
>>\.
postgres=#
或者使用脚本语言处理数据是python等价物
forward or reverse
.replace('\\n','\n') or .replace('\n','\\n')
.replace('\\t','\t') or .replace('\t','\\t')
答案 2 :(得分:0)
我使用这种方式:
str1 <- c("abc 1993 def ghi; klm", "cba 2012 kff kkk; zzz", "xxx 1999 ggg yyy; vvv",
"cgc 2015 tet mmm; bbb")
我认为可以像这样使用(SELECT nextval('seq'), E''||inputstr||'' FROM strongest);
:
COPY