On 5/25/21 4:10 PM, Tom Lane wrote:
> Magnus Hagander <magnus@hagander.net> writes:
>> On Tue, May 25, 2021 at 12:55 PM Aleksander Alekseev
>> <aleksander@timescale.com> wrote:
>>> Back in 2016 while being at PostgresPro I developed the ZSON extension [1]. The extension introduces the new ZSON
type,which is 100% compatible with JSONB but uses a shared dictionary of strings most frequently used in given JSONB
documentsfor compression.
>> If the extension is mature enough, why make it an extension in
>> contrib, and not instead either enhance the existing jsonb type with
>> it or make it a built-in type?
> IMO we have too d*mn many JSON types already. If we can find a way
> to shoehorn this optimization into JSONB, that'd be great. Otherwise
> I do not think it's worth the added user confusion.
>
> Also, even if ZSON was "100% compatible with JSONB" back in 2016,
> a whole lot of features have been added since then. Having to
> duplicate all that code again for a different data type is not
> something I want to see us doing. So that's an independent reason
> for wanting to hide this under the existing type not make a new one.
I take your point. However, there isn't really any duplication. It's
handled by this:
CREATE FUNCTION jsonb_to_zson(jsonb)
RETURNS zson
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
CREATE FUNCTION zson_to_jsonb(zson)
RETURNS jsonb
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
CREATE CAST (jsonb AS zson) WITH FUNCTION jsonb_to_zson(jsonb) AS
ASSIGNMENT;
CREATE CAST (zson AS jsonb) WITH FUNCTION zson_to_jsonb(zson) AS
IMPLICIT;
cheers
andrew
--
Andrew Dunstan
EDB: https://www.enterprisedb.com