Déterminer la version de PostgreSQL pour l'utiliser dans un programme

La norme SQL évolue : tirez le meilleur d'un SGBD qui la respecte en écrivant du SQL moderne avec en complément PL/pgSQL, php, java etc.
Répondre
Phil
Administrateur du site
Messages : 225
Enregistré le : mar. 1 sept. 2015 00:38
Localisation : France
Contact :

Déterminer la version de PostgreSQL pour l'utiliser dans un programme

Message par Phil » jeu. 11 avr. 2019 15:28

Merci à Chantal pour sa question :

"Avec Oracle 11.2, j'utilise la colonne version de v$instance pour déterminer la version du SGBD.
Avec Oracle 18c, je peux aussi utiliser la colonne version_full de v$instance pour avoir en plus la version mineure.
Quelle est la méthode recommandée avec PostgreSQL ?"


Réponse :

Ces colonnes sont des chaînes de caractère, e.g 18.3.0.0. Ce n'est pas forcément idéal pour réaliser des tests.
Je recommande avec PostgreSQL d'utiliser « SELECT current_setting('server_version_num') » pour déterminer précisément la version mineure.

Exemples :
10 => 100000
10.5 => 100005
11 => 110000


La valeur numérique obtenue pour une version majeure est donc forcément supérieure à celle obtenue avec une version majeure antérieure même si cette dernière a été patchée avec une version mineure.

Cela peut donner :

Code : Tout sélectionner

...
declare -i postgres_version=`psql ${psql_connect_string} -c "SELECT current_setting('server_version_num')" -t -A -q -X`
...
elif [[ ${postgres_version} -lt 100000 ]] && [[ ${partitionnement} -eq 1 ]]; then
                               error "${error_015_postgresql_version}"" : -j"  
                               exit 1
...                               
Ce bout de script bash teste que le serveur est au moins en version 10 pour utiliser le partitionnement déclaratif.
Si je voulais en plus éviter tel bug corrigé par une version mineure, il faudrait tester plus finement.
Cdlt. Phil - pgphil.ovh

Répondre