The catalog pg_pltemplate stores "template" information for procedural languages. A template for a language allows the language to be created in a particular database by a simple CREATE LANGUAGE command, with no need to specify implementation details.
Unlike most system catalogs, pg_pltemplate is shared across all databases of a cluster: there is only one copy of pg_pltemplate per cluster, not one per database. This allows the information to be accessible in each database as it is needed.
Table 42-26. pg_pltemplate Columns
Name |
Type |
References |
Description |
tmplname
|
name
|
|
Name of the language this template is for |
tmpltrusted
|
boolean
|
|
True if language is considered trusted |
tmplhandler
|
text
|
|
Name of call handler function |
tmplvalidator
|
text
|
|
Name of validator function, or NULL if none |
tmpllibrary
|
text
|
|
Path of shared library that implements language |
tmplacl
|
aclitem[]
|
|
Access privileges for template (not yet used) |
There are not currently any commands that manipulate procedural language templates; to change the built-in information, a superuser must modify the table using ordinary INSERT, DELETE, or UPDATE commands. It is likely that a future release of PostgreSQL will offer commands to change the entries in a cleaner fashion.
When implemented, the tmplacl field will provide access control for the template itself (i.e., the right to create a language using it), not for the languages created from the template.