PostgreSQLLa base de données la plus sophistiquée au monde.

39. PL/Python - Langage de procédures Python

Le langage de procédures PL/Python permet l'écriture de fonctions PostgreSQL™ avec le langage Python.

Pour installer PL/Python dans une base de données particulières, utilisez createlang plpythonu nom_base.

[Astuce]

Astuce

Si un langage est installé dans template1, toutes les bases nouvellement créées se verront installées ce langage automatiquement.

Depuis PostgreSQL™ 7.4, PL/Python est seulement disponible en tant que langage « sans confiance » (ceci signifiant qu'il n'offre aucun moyen de restreindre ce que les utilisateurs en font). Il a donc été renommé en plpythonu. La variante de confiance plpython pourrait être de nouveau disponible dans le futur, si un nouveau mécanisme sécurisé d'exécution est développé dans Python.

[Note]

Note

Les utilisateurs des paquets sources doivent activer spécifiquement la construction de PL/Python lors des étapes d'installation (référez-vous aux instructions d'installation pour plus d'informations). Les utilisateurs de paquets binaires pourront trouver PL/Python dans un paquet séparé.

39.1. Fonctions PL/Python

Les fonctions PL/Python sont déclarées via la syntaxe habituelle CREATE FUNCTION. Par exemple

CREATE FUNCTION ma_fonction(text) RETURNS text
    AS 'return args[0]'
    LANGUAGE plpythonu;

Le code Python donné comme corps de la définition de fonction est transformé en fonction Python. Par exemple, le code ci-dessus devient

def __plpython_procedure_ma_fonction_23456():
        return args[0]

en supposant que 23456 est l'OID affecté à la fonction par PostgreSQL™.

Si vous ne fournissez pas de valeur de retour, PL/Python renvoie par défaut None. Le module du langage traduit le None de Python en la valeur NULL en SQL.

Les paramètres de fonctions avec PostgreSQL™ sont disponibles dans la liste globale args. Dans l'exemple ma_fonction, args[0] contient ce qui a été passé dans l'argument texte. Pour ma_fonction2(text, integer), args[0] contiendrait l'argument de type text et args[1] l'argument de type integer.

Le dictionnaire global SD est disponible pour stocker des données entres les appels de fonctions. Cette variable est une donnée statique privée. Le dictionnaire global GD est une donnée publique disponible pour toutes les fonctions Python à l'intérieur d'une session. À utiliser avec précaution.

Chaque fonction obtient son propre environnement d'exécution dans l'interpréteur Python, de façon à ce que les données globales et les arguments de fonction provenant de ma_fonction ne soient pas disponibles depuis ma_fonction2. L'exception concerne les données du dictionnaire GD comme indiqué ci-dessus.