背景
PostgreSQLのjsonb型に初めて触ったので、公式 に書いてあること実際に検証してみようと思いました。今回確認するのは、順番の違いです。(8.14.1. JSONの入出力構文)
SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;
json
-------------------------------------------------
{"bar": "baz", "balance": 7.77, "active":false}
(1 row)
SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb;
jsonb
--------------------------------------------------
{"bar": "baz", "active": false, "balance": 7.77}
(1 row)
手順
テーブル作成
CREATE TABLE json_vs_jsonb (
id serial PRIMARY KEY,
data_json json,
data_jsonb jsonb
);
データ挿入
INSERT INTO json_vs_jsonb (data_json, data_jsonb) VALUES
('{"bar": "baz", "balance": 7.77, "active":false}'::json, '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb);
データの選択と比較
data_jsonは挿入したデータの順番と同じだが、data_jsonbでは、挿入したデータの順番と異なることが確認できた!
SELECT data_json FROM json_vs_jsonb WHERE id = 1;
data_json
-------------------------------------------------
{"bar": "baz", "balance": 7.77, "active":false}
(1 row)
postgres=# SELECT data_jsonb FROM json_vs_jsonb WHERE id = 1;
data_jsonb
--------------------------------------------------
{"bar": "baz", "active": false, "balance": 7.77}
(1 row)
まとめ
jsonb型を使うにあたり、公式を読みました。json型よりjsonb型を使うことが推奨されていたこと知りませんでした。今回json型では挿入したデータの順番が保持されるのに対し、jsonb型では順番が保持されないこと確認できました。
参考