Estritamente falando, não existe um "script plpgsql" - PL / pgSQL é a linguagem procedural padrão do PostgreSQL. É um script SQL ou uma função / procedimento plpgsql. Seu exemplo parece indicar um script SQL.
Você pode criar uma função plpgsql (ou sql) (do lado do servidor ) , que aceita qualquer número de argumentos. É muito simples, desde que os argumentos sejam values
. Fica um pouco mais complicado se os argumentos incluem identificadores. Então você terá que usar PL / pgSQL com SQL dinâmico e EXECUTE
.
O PL / pgSQL é pré-instalado por padrão no PostgreSQL 9.0 ou posterior. Você precisa instalá-lo uma vez por banco de dados no Postgres 8.3, no entanto:
CREATE LANGUGAGE plpgsql;
Falando da versão: você deve considerar a atualização para uma versão atual do PostgreSQL. A v8.3 já é muito antiga e está em fim de vida no início de 2013.
Como você parece ter um script SQL pronto, demonstrarei uma função SQL. Função fictícia simples com dois argumentos inteiros:
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$;
Você pode encontrar muitos exemplos mais sofisticados de plpgsql aqui no dba.SE ou no SO .
Você pode chamar esta função e entregar parâmetros em um script de shell: Exemplo básico para uma chamada em um script de shell que usa parâmetros de entrada para parâmetros inteiros (sem aspas simples em torno do valor necessário):
psql mydb -c "SELECT func($1, $2)"
Ou com qualquer tipo de dados:
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
executa uma sequência de comandos e sai. Mais sobre argumentos de linha de comando do psql no manual .
-v
argumento do psql.