Comme indiqué, il s'agit de 2 dict dont la portée est différente.
]]>J'ai créé le type suivant :
CREATE TYPE proeco AS (
nom text,
prenom text,
matricule int4,
hash text);
Ensuite je crée la fonction suivante :
DROP FUNCTION test();
CREATE FUNCTION test() RETURNS SETOF proeco AS $$
rv = plpy.execute("SELECT nom,prenom,matricule,hash FROM users")
d = rv.nrows();
if d > 1:
return rv[0:5]
nom = "toto";
prenom = "toto";
matricule = 123;
hash = "hash";
return (nom,prenom,matricule,hash)
$$ LANGUAGE plpythonu;
Cela fonctionne dans souci, mais lorsque c'est vide, j'ai l"erreur suivante, pourtant il me semble être cohérent par rapport à la doc https://docs.postgresql.fr/10/plpython-data.html
voici le message d'erreur :
Query execution failed
Motif:
SQL Error [22P02]: ERROR: malformed record literal: "toto"
Détail : Missing left parenthesis.
Où : while creating return value
PL/Python function "test"
Merci de votre aide.
]]>L'intérêt comme je le disais, c'est surtout de pouvoir utiliser les nombreuses librairies python, ou avoir une librairie de régles de gestions communes pour l'applicatif et les UDFs. Ca évite par exemple de devoir faire des batches en python avec psychopg2. On peut le faire directement dans une fonction plpython.
]]>