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 を入力しようとしましたが、ここに私の問題があります - 私は ti を正しく取得できないようです。
私の現在の試みは:

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

テーブルから選択するときに必要と思われるレコードを取得しますが、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

ドル引用符で囲まれた文字列定数を使用できます。詳細はこちらPostgreのドキュメント

あなたの場合、クエリは次のようになります

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=> テーブル my_table を作成 (ID uuid、entity_snapshot テキスト);
テーブルを作成
時間: 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": }]'
ポストグル(>);
挿入 0 1
時間: 18,255 ミリ秒
ポストグル=>
于 2012-07-03T14:35:47.383 に答える