psql在字符串

时间:2016-02-28 00:22:45

标签: json postgresql psql jsonb

我正在尝试通过exiftoolpsql生成的JSON插入到postgresql中,这似乎是有效的。似乎某种方式,使用转义的单引号和转义的双引号无法正常工作。我无法弄清楚如何正确逃脱json。似乎psql没有正确处理单引号转义,因为它启动了“输出到psql而不是查询。”

鉴于此表

create table test (exif jsonb);

这些工作:

test=> insert into test values ('{"a": 1, "b": "2"}');
INSERT 0 1
test=> insert into test values ('{"a": 1, "b": "2\""}');
INSERT 0 1
test=> select * from test;
     exif
----------------------
{"a": 1, "b": "2"}
{"a": 1, "b": "2\""}

但这些不是

test=> insert into test values ('{"a": 1, "b": "1\' 2\""}');
Invalid command \""}');. Try \? for help.

test=> select '{"a": 1, "b": "1' 2\""}';
Invalid command \""}';. Try \? for help.

test=> select E'{"a": 1, "b": "1' 2\""}';
Invalid command \""}';. Try \? for help.

test=> select '{"a": 1, "b": "1\' 2\""}';
Invalid command \""}';. Try \? for help.

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

在用于转义单引号的数据库命令中,您需要将其加倍:

test=> insert into test values ('{"a": 1, "b": "1'' 2\""}');

答案 1 :(得分:3)

这是如何正确地逃避单引号:

test=> select '{"a": 1, "b": "1'' 2\""}';