0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLのjsonとjsonbの違いを実際に検証してみた

Last updated at Posted at 2024-03-31

背景

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型では順番が保持されないこと確認できました。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?