创建或替换语言
来自 PostgreSQL wiki
跳转到导航跳转到搜索
适用于 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 是可选的,如果您希望在其他代码中重复使用此代码片段,您可以保留该函数以便稍后引用。
- 原始代码来自 David Fetter