web-dev-qa-db-fra.com

Parcourez les paires clé / valeur d'un objet jsonb dans la fonction postgresql

J'essaie de créer une fonction dans Postgres qui peut parcourir chaque paire clé/valeur dans un objet jsonb donné.

create or replace function myFunction
(input jsonb)
returns jsonb as $$
BEGIN

    // foreach(key in input)
    //       do some math operation on its corresponding value

    returns input;

END; $$

L'entrée d'argument devrait être un objet jsonb, tel que {"a":1, "b":2, "c":3}.

Je souhaite parcourir chaque paire clé/valeur de l'objet. Comme vous pouvez le voir dans mon commentaire, j'avais l'habitude d'écrire du code backend avec des langages de programmation plus généraux comme c, Java, etc. Je ne suis donc pas bon en SQL. J'ai essayé de rechercher en ligne, mais ils parlent de la façon de parcourir le tableau jsonb au lieu de l'objet. Donc vraiment coincé ici.

3
JaneL

Utilisez jsonb_each(jsonb) ou jsonb_each_text(jsonb) dans une boucle FOR comme:

CREATE OR REPLACE FUNCTION my_function(input jsonb)
  RETURNS jsonb
  LANGUAGE plpgsql AS  -- language declaration required
$func$
DECLARE
   _key   text;
   _value text;
BEGIN
    FOR _key, _value IN
       SELECT * FROM jsonb_each_text($1)
    LOOP
       -- do some math operation on its corresponding value
       RAISE NOTICE '%: %', _key, _value;
    END LOOP;

    RETURN input;
END
$func$;

Appel:

SELECT my_function('{"a":1, "b":2, "c":3}');

En relation:

Notez que pour de nombreux problèmes où les gens utilisaient des langages de programmation comme c, Java, etc. auraient tendance à utiliser une boucle, il existe un ensemble supérieur solution en SQL au coin de la rue. Exemples de code côte à côte:

1