CREATE OR REPLACE LANGUAGE

From PostgreSQL wiki
Jump to navigationJump to search

Snippets

CREATE OR REPLACE LANGUAGE

Works with PostgreSQL

any

Written in

SQL

Depends on

Nothing


For PostgreSQL 9.0 and newer

In current releases of PostgreSQL "CREATE OR REPLACE LANGUAGE" is the native syntax for installing a procedural language with no error if it's already installed.

Also PL/pgSQL is installed in the template databases at install time, so will be included in all newly created databases by default, so there's usually no need to install it in schema installation scripts.

For PostgreSQL 8.4 and older

While there is no CREATE OR REPLACE for languages like there are for functions, you can simulate one for the common case where you want to add the pl/pgsql language to a database. Normally this will trigger an ERROR condition if the language is already installed:

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

But the following snippet will add the language only if it doesn't already exist:

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();

You can run this multiple times and it will never produce the error shown above. The DROP FUNCTION at the end is optional, if you want to re-use this snippet in other code you might keep the function around to be referenced later.