postgresql の json データ型
1時に寝て6時半に起きた。連休中に夜更ししてたから生活が乱れた。
ロガー向けのログ保存 API の開発⌗
先週の休暇前にやっていた作業の開発に着手。一通り web api のエンドポイントの実装は終えてテストをあらかた書いたところ。いまのプロジェクトとしても、過去の私の経験としてもやったことのない新しい挑戦の1つとして postgresql の JSONデータ型 を使う。具体的には json 型と jsonb 型の2つがある。前者はテキストで保持する型で、後者は内部的にバイナリに変換されてインデックスも使える。バイナリに変換してインデックスを作る分、insert 時にテキストで保存するよりは少し余分なオーバーヘッドを要する。json のデータを参照用途で使うのか、検索するのかでこれらの型を使い分ければいいのかな。
実際の sql で json データの条件指定は次のようになる。@>
というみたこともない気持ち悪い演算子を使う。
> select * from mytable where data @> '{"x": 1, "y": 2}';
java の jdbc で扱うには PGobject という型に変換して扱う必要がある。
private PGobject convertData(String value) throws SQLException {
var data = new PGobject();
data.setType("jsonb");
data.setValue(value);
return data;
}
余談だけど、curl で json 文字列を query string としてリクエストするには url encode しないといけない。
$ curl -s --get --data-urlencode 'data={"x": 1, "y": 2}' http://localhost/path | jq .
Read other posts