PostgreSQL 8.4:如何判断是否安装了过程语言?

Jer*_*acs 6 postgresql plpgsql functions postgresql-8.4 postgresql-extensions

我有一个安装程序,需要 plpgsql 在 PostgreSQL 8.4 数据库中安装存储过程。我需要确保安装了语言,否则应用程序将失败。我不想放弃语言并重新添加它,因为这可能会搞砸其他一些事情。

有没有办法“轻轻”安装语言?
CREATE LANGUAGE IF NOT EXISTS似乎无效。

Erw*_*ter 8

在 PostgreSQL 9.0及更高版本中,PL/pgSQL 是默认预装的。
9.0 版还引入了CREATE OR REPLACE LANGUAGE

CREATE OR REPLACE LANGUAGE将创建一种新语言,或替换现有定义。如果该语言已存在,则根据指定的值或从pg_pltemplate...中获取的值更新其参数 。

为避免在旧版本上引发异常,您可以检查目录表pg_language。我再次引用手册

系统目录 pg_language [...] 记录有关当前安装的语言的信息。

SELECT EXISTS (
  SELECT 1
  FROM   pg_language
  WHERE  lanname = 'plpgsql');
Run Code Online (Sandbox Code Playgroud)

或者使用客户端应用程序createlang,它可以选择检查现有语言:

createlang -l [connection parameters]
Run Code Online (Sandbox Code Playgroud)