严格来说,没有“ plpgsql脚本”之类的东西-PL / pgSQL是PostgreSQL的默认过程语言。它可以是SQL脚本或plpgsql函数/过程。您的示例似乎表明一个SQL脚本。
您可以改为创建(服务器端)plpgsql(或sql)函数,该函数接受任意数量的参数。只要参数为,这非常简单values
。如果参数包含标识符,则会变得更加复杂。然后,您必须将PL / pgSQL与动态SQL和一起使用EXECUTE
。
默认情况下,PL / pgSQL已预安装在PostgreSQL 9.0或更高版本中。不过,您必须在Postgres 8.3中为每个数据库安装一次:
CREATE LANGUGAGE plpgsql;
说到版本:您应该考虑升级到最新版本的PostgreSQL。v8.3到现在已经很老了,在2013年初就已经寿终正寝了。
由于您似乎已经准备好了SQL脚本,因此我将演示一个SQL函数。具有两个整数参数的简单伪函数:
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$;
您可以在dba.SE或SO 上找到plpgsql的许多更复杂的示例。
您可以调用此函数并在Shell脚本中上交参数:Shell脚本中的调用的基本示例,该调用使用输入参数作为整数参数(所需值周围没有单引号):
psql mydb -c "SELECT func($1, $2)"
或任何数据类型:
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
执行一个命令字符串,然后退出。手册中有关psql命令行参数的更多信息。
-v
psql 的参数。