aboutsummaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/sgml/ref/create_language.sgml103
-rw-r--r--doc/src/sgml/ref/createlang.sgml41
-rw-r--r--doc/src/sgml/xplang.sgml30
3 files changed, 101 insertions, 73 deletions
diff --git a/doc/src/sgml/ref/create_language.sgml b/doc/src/sgml/ref/create_language.sgml
index 9e895f2817b..29bcade195d 100644
--- a/doc/src/sgml/ref/create_language.sgml
+++ b/doc/src/sgml/ref/create_language.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/create_language.sgml,v 1.39 2005/01/04 00:39:53 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/create_language.sgml,v 1.40 2005/09/05 23:50:48 tgl Exp $
PostgreSQL documentation
-->
@@ -20,6 +20,7 @@ PostgreSQL documentation
<refsynopsisdiv>
<synopsis>
+CREATE [ PROCEDURAL ] LANGUAGE <replaceable class="parameter">name</replaceable>
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="parameter">name</replaceable>
HANDLER <replaceable class="parameter">call_handler</replaceable> [ VALIDATOR <replaceable>valfunction</replaceable> ]
</synopsis>
@@ -46,9 +47,25 @@ CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="parameter">name</
</para>
<para>
- Note that procedural languages are local to individual databases.
- To make a language available in all databases by default, it should
- be installed into the <literal>template1</literal> database.
+ There are two forms of the <command>CREATE LANGUAGE</command> command.
+ In the first form, the user merely supplies the name of the desired
+ language, and the <productname>PostgreSQL</productname> server consults
+ an internal table to determine the correct parameters. In
+ the second form, the user supplies the language parameters along with
+ the language name. The second form must be used to create a language
+ that is not present in the internal table, but this form is considered
+ obsolescent. (It is expected that future releases of
+ <productname>PostgreSQL</productname> will replace the internal table
+ with a system catalog that can be extended to support additional
+ languages.)
+ </para>
+
+ <para>
+ When the server finds an entry in its internal table for the given
+ language name, it will use the table data even if the given 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.
</para>
</refsect1>
@@ -145,52 +162,68 @@ CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="parameter">name</
</listitem>
</varlistentry>
</variablelist>
+
+ <para>
+ The <literal>TRUSTED</> option and the support function name(s) are
+ ignored if the server has information about the specified language
+ name in its internal table.
+ </para>
</refsect1>
<refsect1 id="sql-createlanguage-notes">
<title>Notes</title>
<para>
- This command normally should not be executed directly by users.
- For the procedural languages supplied in the
- <productname>PostgreSQL</productname> distribution, the <xref
- linkend="app-createlang"> program should be used, which will also
- install the correct call handler. (<command>createlang</command>
- will call <command>CREATE LANGUAGE</command> internally.)
+ The <xref linkend="app-createlang"> program is a simple wrapper around
+ the <command>CREATE LANGUAGE</> command. It eases
+ installation of procedural languages from the shell command line.
</para>
<para>
- In <productname>PostgreSQL</productname> versions before 7.3, it was
- necessary to declare handler functions as returning the placeholder
- type <type>opaque</>, rather than <type>language_handler</>.
- To support loading
- of old dump files, <command>CREATE LANGUAGE</> will accept a function
- declared as returning <type>opaque</>, but it will issue a notice and
- change the function's declared return type to <type>language_handler</>.
+ Use <xref linkend="sql-droplanguage" endterm="sql-droplanguage-title">, or better yet the <xref
+ linkend="app-droplang"> program, to drop procedural languages.
</para>
<para>
- Use the <xref linkend="sql-createfunction" endterm="sql-createfunction-title"> command to create a new
- function.
+ The system catalog <classname>pg_language</classname> (see <xref
+ linkend="catalog-pg-language">) records information about the
+ currently installed languages. Also, <command>createlang</command>
+ has an option to list the installed languages.
</para>
<para>
- Use <xref linkend="sql-droplanguage" endterm="sql-droplanguage-title">, or better yet the <xref
- linkend="app-droplang"> program, to drop procedural languages.
+ To create functions in a procedural language, a user must have the
+ <literal>USAGE</literal> privilege for the language. By default,
+ <literal>USAGE</> is granted to <literal>PUBLIC</> (i.e., everyone)
+ for trusted languages. This may be revoked if desired.
</para>
<para>
- The system catalog <classname>pg_language</classname> (see <xref
- linkend="catalog-pg-language">) records information about the
- currently installed languages. Also <command>createlang</command>
- has an option to list the installed languages.
+ Procedural languages are local to individual databases.
+ However, a language can be installed into the <literal>template1</literal>
+ database, which will cause it to be available automatically in
+ all subsequently-created databases.
</para>
<para>
- To be able to use a procedural language, a user must be granted the
- <literal>USAGE</literal> privilege. The
- <command>createlang</command> program automatically grants
- permissions to everyone if the language is known to be trusted.
+ The call handler function and the validator function (if any)
+ must already exist if the server does not have information about
+ the language in its internal table. But when there is an entry
+ in the internal table, the functions need not already exist;
+ they will be automatically defined if not present in the database.
+ (This can result in <command>CREATE LANGUAGE</> failing, if the
+ shared library that implements the language is not available in
+ the installation.)
+ </para>
+
+ <para>
+ In <productname>PostgreSQL</productname> versions before 7.3, it was
+ necessary to declare handler functions as returning the placeholder
+ type <type>opaque</>, rather than <type>language_handler</>.
+ To support loading
+ of old dump files, <command>CREATE LANGUAGE</> will accept a function
+ declared as returning <type>opaque</>, but it will issue a notice and
+ change the function's declared return type to <type>language_handler</>.
</para>
</refsect1>
@@ -198,8 +231,16 @@ CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="parameter">name</
<title>Examples</title>
<para>
- The following two commands executed in sequence will register a new
- procedural language and the associated call handler.
+ The preferred way of creating any of the standard procedural languages
+ is just:
+<programlisting>
+CREATE LANGUAGE plpgsql;
+</programlisting>
+ </para>
+
+ <para>
+ For a language not known in the server's internal table, a sequence
+ such as this is needed:
<programlisting>
CREATE FUNCTION plsample_call_handler() RETURNS language_handler
AS '$libdir/plsample'
diff --git a/doc/src/sgml/ref/createlang.sgml b/doc/src/sgml/ref/createlang.sgml
index 9829d845b0e..f9f8dc1ea78 100644
--- a/doc/src/sgml/ref/createlang.sgml
+++ b/doc/src/sgml/ref/createlang.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/createlang.sgml,v 1.35 2005/06/21 04:02:31 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/createlang.sgml,v 1.36 2005/09/05 23:50:48 tgl Exp $
PostgreSQL documentation
-->
@@ -42,13 +42,7 @@ PostgreSQL documentation
programming language to a <productname>PostgreSQL</productname> database.
<application>createlang</application> can handle all the languages
supplied in the default <productname>PostgreSQL</> distribution, but
- not languages provided by other parties.
- </para>
- <para>
- Although backend programming languages can be added directly using
- several <acronym>SQL</acronym> commands, it is recommended to use
- <application>createlang</application> because it performs a number
- of checks and is much easier to use. See
+ not languages provided by other parties. See
<xref linkend="sql-createlanguage" endterm="sql-createlanguage-title">
for additional information.
</para>
@@ -66,8 +60,8 @@ PostgreSQL documentation
<term><replaceable class="parameter">langname</replaceable></term>
<listitem>
<para>
- Specifies the name of the procedural programming language to be
- defined.
+ Specifies the name of the procedural programming language to be
+ defined.
</para>
</listitem>
</varlistentry>
@@ -77,7 +71,7 @@ PostgreSQL documentation
<term><option><optional>--dbname</> <replaceable class="parameter">dbname</replaceable></></term>
<listitem>
<para>
- Specifies to which database the language should be added.
+ Specifies to which database the language should be added.
The default is to use the database with the same name as the
current system user.
</para>
@@ -104,17 +98,6 @@ PostgreSQL documentation
</listitem>
</varlistentry>
- <varlistentry>
- <term><option>-L <replaceable class="parameter">directory</replaceable></></term>
- <listitem>
- <para>
- Specifies the directory in which the language interpreter is
- to be found. The directory is normally found automatically; this
- option is primarily for debugging purposes.
- </para>
- </listitem>
- </varlistentry>
-
</variablelist>
</para>
@@ -128,10 +111,10 @@ PostgreSQL documentation
<term><option>--host <replaceable class="parameter">host</replaceable></></term>
<listitem>
<para>
- Specifies the host name of the machine on which the
- server
- is running. If the value begins with a slash, it is used
- as the directory for the Unix domain socket.
+ Specifies the host name of the machine on which the
+ server
+ is running. If the value begins with a slash, it is used
+ as the directory for the Unix domain socket.
</para>
</listitem>
</varlistentry>
@@ -141,9 +124,9 @@ PostgreSQL documentation
<term><option>--port <replaceable class="parameter">port</replaceable></></term>
<listitem>
<para>
- Specifies the TCP port or local Unix domain socket file
- extension on which the server
- is listening for connections.
+ Specifies the TCP port or local Unix domain socket file
+ extension on which the server
+ is listening for connections.
</para>
</listitem>
</varlistentry>
diff --git a/doc/src/sgml/xplang.sgml b/doc/src/sgml/xplang.sgml
index 76842017a6a..7943138e623 100644
--- a/doc/src/sgml/xplang.sgml
+++ b/doc/src/sgml/xplang.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/xplang.sgml,v 1.28 2004/12/30 21:45:37 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/xplang.sgml,v 1.29 2005/09/05 23:50:48 tgl Exp $
-->
<chapter id="xplang">
@@ -59,17 +59,19 @@ $PostgreSQL: pgsql/doc/src/sgml/xplang.sgml,v 1.28 2004/12/30 21:45:37 tgl Exp $
</para>
<para>
- For the languages supplied with the standard distribution, the
- program <xref linkend="app-createlang"> may be used to install the
- language instead of carrying out the details by hand. For
- example, to install the language
+ For the languages supplied with the standard distribution, it is
+ only necessary to execute <command>CREATE LANGUAGE</>
+ <replaceable>language_name</> to install the language into the
+ current database. Alternatively, the program <xref
+ linkend="app-createlang"> may be used to do this from the shell
+ command line. For example, to install the language
<application>PL/pgSQL</application> into the database
<literal>template1</>, use
<programlisting>
createlang plpgsql template1
</programlisting>
The manual procedure described below is only recommended for
- installing custom languages that <command>createlang</command>
+ installing custom languages that <command>CREATE LANGUAGE</command>
does not know about.
</para>
@@ -80,9 +82,10 @@ createlang plpgsql template1
<para>
A procedural language is installed in a database in four steps,
- which must be carried out by a database superuser. The
- <command>createlang</command> program automates all but <xref
- linkend="xplang-install-cr1">.
+ which must be carried out by a database superuser. (For languages
+ known to <command>CREATE LANGUAGE</>, the second and third steps
+ can be omitted, because they will be carried out automatically
+ if needed.)
</para>
<step performance="required" id="xplang-install-cr1">
@@ -202,10 +205,11 @@ CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql
In a default <productname>PostgreSQL</productname> installation,
the handler for the <application>PL/pgSQL</application> language
is built and installed into the <quote>library</quote>
- directory. If <application>Tcl</> support is configured in, the handlers for
- <application>PL/Tcl</> and <application>PL/TclU</> are also built and installed in the same
- location. Likewise, the <application>PL/Perl</> and <application>PL/PerlU</> handlers are built
- and installed if Perl support is configured, and <application>PL/PythonU</> is
+ directory. If <application>Tcl</> support is configured in, the handlers
+ for <application>PL/Tcl</> and <application>PL/TclU</> are also built and
+ installed in the same location. Likewise, the <application>PL/Perl</> and
+ <application>PL/PerlU</> handlers are built and installed if Perl support
+ is configured, and the <application>PL/PythonU</> handler is
installed if Python support is configured.
</para>