5 Stimmen

Plv8 gespeicherte Prozedur mit jsonb Typ

Dies mag voreilig sein, postgre 9.4 ist immer noch in der Beta-Phase. Ich habe mit dem jsonb-Typ experimentiert. Ich habe kein Glück, wenn ich versuche, einen jsonb-Typ an eine plv8-Funktion zu übergeben, er kommt als Zeichenfolge an. Ich frage mich, ob ich etwas falsch mache?

create or replace function jt ( o json ) returns integer language plv8 immutable
AS $function$
        plv8.elog(INFO, 'Typ ist ', typeof o);
        plv8.elog(INFO, 'Argument ist ', o);
        plv8.elog(INFO, 'Element ist ', o['member']);
$function$;

create or replace function jt ( o jsonb ) returns integer language plv8 immutable
AS $function$
        plv8.elog(INFO, 'Typ ist ', typeof o);
        plv8.elog(INFO, 'Argument ist ', o);
        plv8.elog(INFO, 'Element ist ', o['member']);
$function$;

dann, wenn ich mit json ausführe:

psql=# select jt('{"member":"test"}'::json);
INFO:  Typ ist  Objekt
INFO:  Argument ist  [Objekt Objekt]
INFO:  Element ist  test

aber, wenn ich mit jsonb ausführe:

psql=# select jt('{"member":"test"}'::jsonb);
INFO:  Typ ist  Zeichenfolge
INFO:  Argument ist  {"member": "test"}
INFO:  Element ist  nicht definiert

-g

5voto

Craig Ringer Punkte 280068

PL/V8 muss Unterstützung für JSONB hinzufügen, bevor dies so funktioniert, wie Sie erwarten.

In der Zwischenzeit können Sie immer noch einfaches json übergeben; konvertieren Sie einfach jsonb in json.

Neuigkeiten seit ~2015

plv8-Projekt hat sich nach 2014 geändert, wie dieser Kommentar des Sponsors und Hauptbeitragsleistenden des Projekts, JerrySievert, im Jahr 2017:

Die Geschwindigkeitsunterschiede zwischen JSONB und JSON waren bekannt und wurden angegangen,
JSONB führt jetzt eine direkte Konvertierung in C++ in v8-Objekte durch und läuft schneller als eine JSON-Konvertierung

Die letzte Überarbeitungshistorie zeigt einige Hinweise zum Startdatum von JSONb:

  • am 26.05.2015 (Version 1.4.4) "Hinzufügen von Typumwandlung für jsonb in Funktionsgrenze".

  • am 23.03.2019 (Version 2.3.10) "Direkte jsonb-Konvertierungsoption hinzufügen", "Hinzufügen eines Speicherkontexts für jsonb-Konvertierung".

Die Empfehlung lautet, JSONB mit plv8 Version 2.3.10 oder neuer zu verwenden... Dennoch bestätigte Jarry, dass fast alles auch für ältere Versionen von plv8 in Ordnung sein wird:

Die JSONB-Unterstützung ist seit dem 22. April 2015 aktiv und vollständig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X