Ich versuche json_extract_path_text()
, mithilfe des citext
Moduls eine Version zu erstellen , bei der die Groß- und Kleinschreibung nicht berücksichtigt wird.
Ich möchte, dass dies ein einfacher Wrapper um die eingebaute Funktion ist. Der einzige Unterschied besteht darin, dass sie citext
stattdessen als erster Parameter akzeptiert wird json
. Ich möchte, dass dies ein direkter Durchgang zur nativen Implementierung ist, nur mit einer vorherigen Typkonvertierung. Folgendes habe ich bisher:
create extension citext;
create or replace function json_extract_path_text ( string citext, variadic params text[]) RETURNS text IMMUTABLE AS
$$
BEGIN
SELECT json_extract_path_text(string::json, params);
END;
$$
LANGUAGE 'plpgsql';
Dies funktioniert jedoch aufgrund der Typfehlanpassung nicht richtig:
ERROR: function json_extract_path_text(json, text[]) does not exist LINE 1: SELECT json_extract_path_text(string::json, params) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. QUERY: SELECT json_extract_path_text(string::json, params) CONTEXT: PL/pgSQL function json_extract_path_text(citext,text[]) line 3 at SQL statement
Ich habe versucht, eine Lösung mit dynamischer String-Konstruktion zu hacken EXECUTE
, aber das ist ein echtes Problem, und ich VARIADIC
denke, es muss einen saubereren Weg geben, um Parameter an die innere Funktion weiterzuleiten . Ich sehe jedoch keinen offensichtlichen Weg, dies zu tun. Wie kann ich das erreichen?
quelle
SELECT jsonb_build_array('A', VARIADIC array_agg(value)) FROM jsonb_array_elements_text('["B","C"]'::JSONB)
eine Idee warum?SELECT jsonb_build_array('A', VARIADIC '{B,C}'::text[])
,jsonb_build_array()
erwarten jedoch entweder eine Liste von Werten oder ein einzelnes Array nach dem SchlüsselwortVARIADIC
. Je nachdem, was Sie erreichen möchten, gibt es verschiedene Lösungen. Bitte stellen Sie eine neue Frage, wenn noch etwas unklar ist. Sie können jederzeit einen Link zu diesem für den Kontext erstellen.