创建或替换语言

来自 PostgreSQL wiki
跳转到导航跳转到搜索

代码片段

创建或替换语言

适用于 PostgreSQL

任何

用什么语言写的

SQL

依赖于


适用于 PostgreSQL 9.0 及以上版本

在当前版本的 PostgreSQL 中,“CREATE OR REPLACE LANGUAGE” 是安装过程语言的原生语法,如果语言已经安装,则不会出现错误。

此外,PL/pgSQL 在安装时会安装在模板数据库中,因此默认情况下会包含在所有新创建的数据库中,因此通常不需要在架构安装脚本中安装它。

适用于 PostgreSQL 8.4 及更早版本

虽然语言没有像函数那样提供 CREATE OR REPLACE,但可以模拟一种常见情况,即希望将 pl/pgsql 语言添加到数据库中。

$ psql -c "CREATE LANGUAGE plpgsql"
ERROR:  language "plpgsql" already exists

但是,以下代码片段仅在语言不存在的情况下添加语言。

CREATE OR REPLACE FUNCTION make_plpgsql()
RETURNS VOID
LANGUAGE SQL
AS $$
CREATE LANGUAGE plpgsql;
$$;

SELECT
    CASE
    WHEN EXISTS(
        SELECT 1
        FROM pg_catalog.pg_language
        WHERE lanname='plpgsql'
    )
    THEN NULL
    ELSE make_plpgsql() END;

DROP FUNCTION make_plpgsql();

您可以多次运行此代码,它永远不会产生上述错误。最后的 DROP FUNCTION 是可选的,如果您希望在其他代码中重复使用此代码片段,您可以保留该函数以便稍后引用。