create_language(5)
CREATE LANGUAGE() SQL Commands CREATE LANGUAGE()
NAME
CREATE LANGUAGE - define a new procedural language
SYNOPSIS
CREATE [ PROCEDURAL ] LANGUAGE name
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
HANDLER call_handler [ VALIDATOR valfunction ]
DESCRIPTION
Using CREATE LANGUAGE, a PostgreSQL user can register a new
procedural language with a PostgreSQL database. Subse-
quently, functions and trigger procedures can be defined in
this new language. The user must have the PostgreSQL
superuser privilege to register a new language.
CREATE LANGUAGE effectively associates the language name
with a call handler that is responsible for executing func-
tions written in the language. Refer to in the documentation
for more information about language call handlers.
There are two forms of the CREATE LANGUAGE command. In the
first form, the user supplies just the name of the desired
language, and the PostgreSQL server consults the
pg_pltemplate system catalog to determine the correct param-
eters. In the second form, the user supplies the language
parameters along with the language name. The second form
can be used to create a language that is not defined in
pg_pltemplate, but this approach is considered obsolescent.
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
TRUSTED
TRUSTED specifies that the call handler for the
language is safe, that is, it does not offer an
unprivileged user any functionality to bypass access
restrictions. If this key word is omitted when regis-
tering the language, only users with the PostgreSQL
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 language
SQL - Language StatementLast change: 2008-01-03 1
CREATE LANGUAGE() SQL Commands CREATE LANGUAGE()
name is case insensitive. The name must be unique among
the languages in the database.
For backward compatibility, the name may be enclosed by
single quotes.
HANDLER call_handler
call_handler is the name of a previously registered
function that will be called to execute 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
PostgreSQL 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.
VALIDATOR valfunction
valfunction is 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 a new function
will not be checked 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 typ-
ically return void.
A validator function would typically inspect the func-
tion body for syntactical correctness, but it can also
look at other properties of the function, for example
if the language cannot handle certain argument types.
To signal an error, the validator function should use
the ereport() function. The return value of the func-
tion is ignored.
The TRUSTED option and the support function name(s) are
ignored if the server has an entry for the specified
language name in pg_pltemplate.
NOTES
The createlang(1) program is a simple wrapper around the
CREATE LANGUAGE command. It eases installation of procedural
languages from the shell command line.
Use DROP LANGUAGE [drop_language(5)], or better yet the dro-
plang(1) program, to drop procedural languages.
The system catalog pg_language (see in the documentation)
records information about the currently installed languages.
Also, createlang has an option to list the installed
languages.
SQL - Language StatementLast change: 2008-01-03 2
CREATE LANGUAGE() SQL Commands CREATE LANGUAGE()
To create functions in a procedural language, a user must
have the USAGE privilege for the language. By default, USAGE
is granted to PUBLIC (i.e., everyone) for trusted languages.
This may be revoked if desired.
Procedural languages are local to individual databases.
However, a language can be installed into the template1
database, which will cause it to be available automatically
in all subsequently-created 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. (This
can result in CREATE LANGUAGE failing, if the shared library
that implements the language is not available in the instal-
lation.)
In PostgreSQL versions before 7.3, it was necessary to
declare handler functions as returning the placeholder type
opaque, rather than language_handler. To support loading of
old dump files, CREATE LANGUAGE will accept a function
declared as returning opaque, but it will issue a notice and
change the function's declared return type to
language_handler.
EXAMPLES
The preferred way of creating any of the standard procedural
languages is just:
CREATE LANGUAGE plpgsql;
For a language not known in the pg_pltemplate catalog, a
sequence such as this is needed:
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 PostgreSQL extension.
SEE ALSO
ALTER LANGUAGE [alter_language(5)], CREATE FUNCTION
[create_function(l)], DROP LANGUAGE [drop_language(l)],
GRANT [grant(l)], REVOKE [revoke(l)], createlang
[createlang(1)], droplang [droplang(1)]
SQL - Language StatementLast change: 2008-01-03 3
Man(1) output converted with
man2html