PostgreSQL中jsonb类型转换对相同逻辑输入是否输出一致?
PostgreSQL的jsonb类型对相同逻辑输入是否会输出一致的结果?
是的,PostgreSQL的jsonb类型对逻辑等价的JSON输入,会输出一致的序列化结果。
依据说明
PostgreSQL的jsonb类型存储的是经过解析的二进制格式数据,而非原始字符串。在序列化输出为文本形式时,会遵循固定规则:
- 对对象的键(包括顶层和嵌套对象的键)按字典序排序
- 忽略输入中所有无关的空白字符(如换行、多余空格)
- 仅保留键值对的逻辑内容,忽略键的顺序差异
这意味着只要两个JSON的键值对集合完全相同,无论输入时键的顺序、空白格式如何,转换为jsonb后再序列化输出的结果都会完全一致。
测试验证
测试SQL语句
SELECT ('{"def": {"apply_if_file": "go.mod", "package_ecosystem": "gomod", "schedule_interval": "daily"}, "type": "dependabot_configured"}' :: JSONB); SELECT ('{"def": { "package_ecosystem": "gomod", "schedule_interval": "daily", "apply_if_file": "go.mod"}, "type": "dependabot_configured"}' :: JSONB); SELECT ('{"type": "dependabot_configured", "def": { "package_ecosystem": "gomod", "schedule_interval": "daily", "apply_if_file": "go.mod"} }' :: JSONB);
输出结果
{"def": {"apply_if_file": "go.mod", "package_ecosystem": "gomod", "schedule_interval": "daily"}, "type": "dependabot_configured"}
三个逻辑等价但格式、键顺序不同的JSON输入,转换为jsonb后输出完全一致,验证了上述结论。
内容的提问来源于stack exchange,提问作者VIAGC
相关产品推荐
相关产品推荐

