À strictement parler, il n'existe pas de "script plpgsql" - PL / pgSQL est le langage procédural par défaut de PostgreSQL. Il s'agit soit d'un script SQL, soit d'une fonction / procédure plpgsql. Votre exemple semble indiquer un script SQL.
Vous pouvez créer une fonction plpgsql (ou sql) ( côté serveur ) à la place, qui accepte un nombre illimité d'arguments. C'est très simple tant que les arguments le sont values
. Cela devient un peu plus compliqué si les arguments incluent des identifiants. Ensuite, vous devrez utiliser PL / pgSQL avec SQL dynamique et EXECUTE
.
PL / pgSQL est préinstallé par défaut dans PostgreSQL 9.0 ou version ultérieure. Vous devez l'installer une fois par base de données dans Postgres 8.3, cependant:
CREATE LANGUGAGE plpgsql;
En parlant de la version: vous devriez envisager de passer à une version actuelle de PostgreSQL. La v8.3 est désormais très ancienne, en fin de vie début 2013.
Puisque vous semblez avoir un script SQL prêt, je vais vous montrer une fonction SQL. Fonction factice simple avec deux arguments entiers:
CREATE OR REPLACE FUNCTION func(int, int)
LANGUAGE sql RETURNS void AS
$func$
UPDATE tbl1 SET col1 = $1 WHERE id = $2;
UPDATE tbl2 SET col1 = $1 WHERE id = $2;
$func$;
Vous pouvez trouver de nombreux exemples plus sophistiqués pour plpgsql ici sur dba.SE ou sur SO .
Vous pouvez appeler cette fonction et remettre des paramètres dans un script shell: Exemple de base pour un appel dans un script shell qui utilise des paramètres d'entrée pour les paramètres entiers (pas de guillemets simples autour de la valeur requise):
psql mydb -c "SELECT func($1, $2)"
Ou avec n'importe quel type de données:
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
exécute une chaîne de commande, puis se ferme. Plus d'informations sur les arguments en ligne de commande de psql dans le manuel .
-v
argument de psql.