3


我在 postgresql 中定义了下表:

        Column      |          Type          | Modifiers 
-----------------+------------------------+-----------
 id              | uuid                   | not null
 entity_snapshot | text                   | 
Indexes:
    "pk_id" PRIMARY KEY, btree (id)

我想存储以下 JSON 字符串:

[ "org.test.MyUniqueId", {:   "uuid" : "f4b40050-9716-4346-bf84-8325fadd9876": } ]

对于某些测试,我没有使用 Jackson 执行此操作,而是尝试手动键入 SQL,这是我的问题 - 我似乎无法正确处理。
我目前的尝试是:

insert into my_table(id,entity_snapshot) values ('d11d944e-6e78-11e1-aae1-52540015fc3f','[ \"org.test.MyUniqueId\", {:   \"uuid\" : \"f4b40050-9716-4346-bf84-8325fadd9876\": } ]');

当我从表中选择时,Procuedure 一个看起来像我需要的记录,但是当我尝试使用 Jackson 解析它时,我得到一个错误 -

org.apache.commons.lang.SerializationException: org.codehaus.jackson.JsonParseException: Unexpected character (':' (code 58)): was expecting double-quote to start field name

不用说,如果通过我的 java 代码插入相同的记录,我可以对其进行解析,当用人眼查看记录时,它对我来说看起来是一样的。
你能告诉我我的 SQL 插入语句哪里错了吗?

4

2 回答 2

7

您可以使用美元引用的字符串常量。详细信息在这里Postgres 文档

在您的情况下,查询应如下所示

insert into my_table(id,entity_snapshot) values ('d11d944e-6e78-11e1-aae1-52540015fc3f',$$[ "org.test.MyUniqueId", {:   "uuid" : "f4b40050-9716-4346-bf84-8325fadd9876": } ]$$);
于 2012-07-03T12:42:41.330 回答
3

单引号内的双引号不需要任何转义。

insert into my_table (id,entity_snapshot)
values 
(
   'd11d944e-6e78-11e1-aae1-52540015fc3f',
   '["org.test.MyUniqueId", {: "uuid" : "f4b40050-9716-4346-bf84-8325fadd9876": }]'
);

会工作得很好:

postgres=> create table my_table (id uuid, entity_snapshot text);
创建表
时间:34,936 毫秒
postgres=> 插入 my_table (id,entity_snapshot)
postgres-> 值
postgres-> (
postgres(> 'd11d944e-6e78-11e1-aae1-52540015fc3f',
postgres(>'[“org.test.MyUniqueId”,{:“uuid”:“f4b40050-9716-4346-bf84-8325fadd9876”:}]'
postgres(>);
插入 0 1
时间:18,255 毫秒
postgres=>
于 2012-07-03T14:35:47.383 回答