Hello, I’m DocuDroid!
Submitting feedback
Thank you for rating our AI Search!
We would be grateful if you could share your thoughts so we can improve our AI Search for you and other readers.
GitHub

CREATE LANGUAGE

Defines a new procedural language.

Synopsis

CREATE [ OR REPLACE ] [ PROCEDURAL ] LANGUAGE <name>

CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <name>
    HANDLER <call_handler> [ INLINE <inline_handler> ]
   [ VALIDATOR <valfunction> ]

Description

CREATE LANGUAGE registers a new procedural language with a Greengage DB. Subsequently, functions and trigger procedures can be defined in this new language.

NOTE

Procedural languages for Greengage DB have been made into "extensions", and should therefore be installed with CREATE EXTENSION, not CREATE LANGUAGE. Using CREATE LANGUAGE directly should be restricted to extension installation scripts. If you have a "bare" language in your database, perhaps as a result of an upgrade, you can convert it to an extension using CREATE EXTENSION <langname> FROM unpackaged.

Superusers can register a new language with Greengage DB. A database owner can also register within that database any language listed in the pg_pltemplate catalog in which the tmpldbacreate field is true. The default configuration allows only trusted languages to be registered by database owners. The creator of a language becomes its owner and can later drop it, rename it, or assign ownership to a new owner.

CREATE OR REPLACE LANGUAGE will either create a new language, or replace an existing definition. If the language already exists, its parameters are updated according to the values specified or taken from pg_pltemplate, but the language’s ownership and permissions settings do not change, and any existing functions written in the language are assumed to still be valid. In addition to the normal privilege requirements for creating a language, the user must be superuser or owner of the existing language. The REPLACE case is mainly meant to be used to ensure that the language exists. If the language has a pg_pltemplate entry, then REPLACE will not actually change anything about an existing definition, except in the unusual case where the pg_pltemplate entry has been modified since the language was created.

CREATE LANGUAGE effectively associates the language name with handler function(s) that are responsible for running functions written in that language. For a function written in a procedural language (a language other than C or SQL), the database server has no built-in knowledge about how to interpret the function’s source code. The task is passed to a special handler that knows the details of the language. The handler could either do all the work of parsing, syntax analysis, execution, and so on or it could serve as a bridge between Greengage DB and an existing implementation of a programming language. The handler itself is a C language function compiled into a shared object and loaded on demand, just like any other C function. These procedural language packages are included in the standard Greengage DB distribution: PL/pgSQL, PL/Perl, and PL/Python. Language handlers have also been added for PL/Java and PL/R, but those languages are not pre-installed with Greengage DB. See the topic on Procedural Languages in the PostgreSQL documentation for more information on developing functions using these procedural languages.

The PL/Perl, PL/Java, and PL/R libraries require the correct versions of Perl, Java, and R to be installed, respectively.

There are two forms of the CREATE LANGUAGE command. In the first form, the user specifies the name of the desired language and the Greengage DB server uses the pg_pltemplate system catalog to determine the correct parameters. In the second form, the user specifies the language parameters as well as the language name. You can use the second form to create a language that is not defined in pg_pltemplate.

When the server finds an entry in the pg_pltemplate catalog for the given language name, it will use the catalog data even if the command includes language parameters. This behavior simplifies loading of old dump files, which are likely to contain out-of-date information about language support functions.

Parameters

Parameter Description

TRUSTED

TRUSTED specifies that the language does not grant access to data that the user would not otherwise have. If this keyword is omitted when registering the language, only users with the Greengage DB superuser privilege can use this language to create new functions

PROCEDURAL

This is a noise word

name

The name of the new procedural language. The name must be unique among the languages in the database Built-in support is included for plpgsql, plperl, and plpythonu. The languages plpgsql (PL/pgSQL) and plpythonu (PL/Python) are installed by default in Greengage DB

HANDLER <call_handler>

Ignored if the server has an entry for the specified language name in pg_pltemplate. The name of a previously registered function that will be called to run the procedural language functions. The call handler for a procedural language must be written in a compiled language such as C with version 1 call convention and registered with Greengage DB as a function taking no arguments and returning the language_handler type, a placeholder type that is simply used to identify the function as a call handler

INLINE <inline_handler>

The name of a previously registered function that is called to run an anonymous code block in this language that is created with the DO command. If an inline_handler function is not specified, the language does not support anonymous code blocks. The handler function must take one argument of type internal, which is the DO command internal representation. The function typically returns void. The return value of the handler is ignored

VALIDATOR <valfunction>

Ignored if the server has an entry for the specified language name in pg_pltemplate. The name of a previously registered function that will be called when a new function in the language is created, to validate the new function. If no validator function is specified, then Greengage DB will not check a new function when it is created. The validator function must take one argument of type oid, which will be the OID of the to-be-created function, and will typically return void

Notes

The PL/pgSQL language is already registered in all databases by default. The PL/Python language extension is installed but not registered.

The pg_language system catalog records information about the currently installed languages.

To create functions in a procedural language, a user must have the USAGE privilege for the language. By default, USAGE is granted to PUBLIC (everyone) for trusted languages. This may be revoked if desired.

Procedural languages are local to individual databases. You create and drop languages for individual databases.

The call handler function and the validator function (if any) must already exist if the server does not have an entry for the language in pg_pltemplate. But when there is an entry, the functions need not already exist. They will be automatically defined if not present in the database.

Any shared library that implements a language must be located in the same LD_LIBRARY_PATH location on all segment hosts in your Greengage DB cluster.

Examples

The preferred way of creating any of the standard procedural languages is to use CREATE EXTENSION instead of CREATE LANGUAGE. For example:

CREATE EXTENSION plperl;

For a language not known in the pg_pltemplate catalog, you should create a call handler function and register the language:

CREATE FUNCTION plsample_call_handler()
    RETURNS language_handler
AS
'$libdir/plsample'
    LANGUAGE C;

CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;

Compatibility

CREATE LANGUAGE is a Greengage DB extension.

See also