PL/Python accepte à la fois les versions 2 et 3 de Python. (Les instructions d'installation de PostgreSQL peuvent contenir des informations plus précises sur les versions mineures précisément supportées de Python.) Comme les variantes Python 2 et Python 3 sont incompatibles pour certaines parties très importantes, le schéma de nommage et de transition suivant est utilisé par PL/Python pour éviter de les mixer :
Le langage PostgreSQL nommé plpython2u
implémente
PL/Python sur la variante Python 2 du langage.
Le langage PostgreSQL nommé plpython3u
implémente
PL/Python sur la variante Python 3 du langage.
Le langage nommé plpythonu
implémente PL/Python
suivant la variante par défaut du langage Python, qui est actuellement
Python 2. (Cette valeur par défaut est indépendante de ce que toute
installation locale de Python qui pourrait être considérée comme la valeur
par « défaut », par exemple ce que pourrait être
/usr/bin/python
.) La valeur par défaut sera
probablement changée avec Python 3 dans une prochaine version de
PostgreSQL, suivant les progrès de la migration à Python 3 dans la
communauté Python.
Cela est analogue aux recommendations de PEP 394 au
regard des nommages et transitions des commandes python
.
Cela dépend de la configuration lors de la compilation ou des paquets installés si PL/Python pour Python 2 ou Python 3 ou les deux sont disponibles.
La variante construite dépend de la version de Python trouvée pendant
l'installation ou de la version sélectionnée explicitement en configurant
la variable d'environnement PYTHON
; voir Section 16.4. Pour que les deux variantes de PL/Python
soient disponibles sur une installation, le répertoire des sources doit
être configuré et construit deux fois.
Ceci a pour résultat la stratégie suivante d'utilisation et de migration :
Les utilisateurs existants et ceux qui ne sont pas actuellement
intéressés par Python 3 utilisent le nom plpythonu
et n'ont rien à changer pour l'instant. Il est recommandé de
« s'assurer » graduellement de migrer le code vers
Python 2.6/2.7 pour simplifier une migration éventuelle vers Python 3.
En pratique, beaucoup de fonctions PL/Python seront migrées à Python 3 avec peu, voire par du tout, de modifications.
Les utilisateurs sachant d'avance qu'ils ont du code reposant massivement
sur Python 2 et ne planifient pas de changer peuvent utiliser le nom
plpython2u
. Cela continuera de fonctionner, y compris
dans un futur lointain, jusqu'à ce que le support de Python 2 soit
complètement supprimée de PostgreSQL.
Les utilisateurs qui veulent utiliser Python 3 peuvent utiliser le nom
plpython3u
, qui continuera à fonctionner en permanence
avec les standards actuels. Dans le futur, quand Python 3 deviendra la
version par défaut du langage, ils pourront supprimer le chiffre
« 3 », principalement pour des raisons esthétiques.
Les intrépides qui veulent construire un système d'exploitation utilisant
seulement Python-3, peuvent modifier le contenu de
pg_pltemplate
pour rendre plpythonu
équivalent à
plpython3u
, en gardant en tête que cela rend leur
installation incompatible avec la majorité de ce qui existe dans ce
monde.
Voir aussi le document What's New In Python 3.0 pour plus d'informations sur le portage vers Python 3.
Il n'est pas permis d'utiliser PL/Python basé sur Python 2 et PL/Python basé sur Python 3 dans la même session car les symbôles dans les modules dynamiques entreraient en conflit, ce qui pourrait résulter en des arrêts brutaux du processus serveur PostgreSQL. Une vérification est ajoutée pour empêcher ce mélange de versions majeures Python dans une même session. Cette vérification aura pour effet d'annuler la session si une différence est détectée. Néanmoins, il est possible d'utiliser les deux variantes de PL/Python dans une même base de données à condition que ce soit dans des sessions séparées.