postgres.git / summary / log / commit / refs

commit    20a344bce8949f542eb25360fe69f14aa9a05b1b
Author:   Andrew Dunstan <andrew@dunslane.net>
Date:     Fri Jan 03 14:23:46 2025 +0000
First released in: 18.0, 13.19, 14.16, 15.11, 16.7, 17.3

    Document strange jsonb sort order for empty top level arrays
    
    Slightly faulty logic in the original jsonb code (commit d9134d0a355)
    results in an empty top level array sorting less than a json null. We
    can't change the sort order now since it would affect btree indexes over
    jsonb, so document the anomaly.
    
    Backpatch to all live branches (13 .. 17)
    
    In master, also add a code comment noting the anomaly.
    
    Reported-by: Yan Chengpen
    Reviewed-by: Jian He
    
    Discussion: https://postgr.es/m/OSBPR01MB45199DD8DA2D1CECD50518188E272@OSBPR01MB4519.jpnprd01.prod.outlook.com


doc/src/sgml/json.sgml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/json.sgml b/doc/src/sgml/json.sgml index e00e11bff7b..13c5ad8db1b 100644 --- a/doc/src/sgml/json.sgml +++ b/doc/src/sgml/json.sgml @@ -584,12 +584,13 @@ SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @@ '$.tags[*] == "qui"'; The <literal>btree</literal> ordering for <type>jsonb</type> datums is seldom of great interest, but for completeness it is: <synopsis> -<replaceable>Object</replaceable> > <replaceable>Array</replaceable> > <replaceable>Boolean</replaceable> > <replaceable>Number</replaceable> > <replaceable>String</replaceable> > <replaceable>Null</replaceable> +<replaceable>Object</replaceable> > <replaceable>Array</replaceable> > <replaceable>Boolean</replaceable> > <replaceable>Number</replaceable> > <replaceable>String</replaceable> > <replaceable>null</replaceable> <replaceable>Object with n pairs</replaceable> > <replaceable>object with n - 1 pairs</replaceable> <replaceable>Array with n elements</replaceable> > <replaceable>array with n - 1 elements</replaceable> </synopsis> + with the exception that (for historical reasons) an empty top level array sorts less than <replaceable>null</replaceable>. Objects with equal numbers of pairs are compared in the order: <synopsis> <replaceable>key-1</replaceable>, <replaceable>value-1</replaceable>, <replaceable>key-2</replaceable> ... [parent: 73055a2bb170]