Script SQL avec paramètre

Exécuter un script SQL avec un paramètre sous PostgreSQL

Problématique

Il peut être parfois utile ou nécessaire de pouvoir exécuter un script SQL sous PostgreSQL en passant un ou plusieurs paramètres.

Solution

Pour passer un paramètre à un script SQL sous PostgreSQL, il y a plusieurs méthodes.

Base de données épaisse

La première méthode consiste à utiliser la technique de la base de données épaisse, c'est-à-dire créer une fonction à laquelle on passe le paramètre. L'avantage de cette solution est qu'elle est optimalisée puisque la requête a déjà été analysée au moment de l'installation et est plus rapide au moment de l'exécution. L'inconvénient est qu'elle nécessite l'installation d'une fonction sur la base de données, ce qui n'est pas toujours utile.

Cependant, cette méthode est toujours conseillée pour les nombreux avantages qu'elle prossède : code centralisé, performances accrues, etc.

Script indépendant

Dans le cas où l'utilisation d'une base de données épaise n'est pas requis (contrainte technique, manque d'élégance, etc.), un script peut être nécessaire.

Pour passer un ou plusieurs paramètres à ce script, PostgreSQL nécessite des paramètres nommés, contrairement à Oracle qui nécessite que des paramètres numérotés.

un paramètre nommé est simplement un paramètre étant identifié par son nom (et non par un numéro).

Par exemple :

SELECT
champ1,
champ2,
champ3
FROM
ma_table
WHERE
champ4 = :param

:param est ici le paramètre défini. Le paramètre doit toujours être précédé de : dans le script SQL.

On passera le paramètre au script grâce à l'option -v (comme pour awk) suivi de paramètre=valeur.

-v mon_paramètre=ma_valeur

Pour appeler le script, il faut utiliser l'option -f (comme pour awk) suivi du nom du script.

Ce qui donne :

# /usr/local/bin/psql -d ma_base -U mon_user -h mon_serveur -q -A -t -v mon_patamètre=ma_valeur -f mon_script.sql

Le résultat s'affiche sur la console. Pour rediriger vers un fichier, il suffira d'utiliser l'option -o suivi du fichier à utiliser.