43.1. Overview
PL/Tcl offers most of the capabilities a function writer has in the C language, with a few restrictions, and with the addition of the powerful string processing libraries that are available for Tcl.
One compelling
good
restriction is that
everything is executed from within the safety of the context of a
Tcl interpreter. In addition to the limited command set of safe
Tcl, only a few commands are available to access the database via
SPI and to raise messages via
elog()
. PL/Tcl
provides no way to access internals of the database server or to
gain OS-level access under the permissions of the
PostgreSQL
server process, as a C
function can do. Thus, unprivileged database users can be trusted
to use this language; it does not give them unlimited authority.
The other notable implementation restriction is that Tcl functions cannot be used to create input/output functions for new data types.
Sometimes it is desirable to write Tcl functions that are not restricted
to safe Tcl. For example, one might want a Tcl function that sends
email. To handle these cases, there is a variant of
PL/Tcl
called
PL/TclU
(for untrusted Tcl). This is exactly the same language except that a full
Tcl interpreter is used.
If
PL/TclU
is used, it must be
installed as an untrusted procedural language
so that only
database superusers can create functions in it. The writer of a
PL/TclU
function must take care that the function cannot be used to do anything
unwanted, since it will be able to do anything that could be done by
a user logged in as the database administrator.
The shared object code for the
PL/Tcl
and
PL/TclU
call handlers is automatically built and
installed in the
PostgreSQL
library
directory if Tcl support is specified in the configuration step of
the installation procedure. To install
PL/Tcl
and/or
PL/TclU
in a particular database, use the
CREATE EXTENSION
command, for example
CREATE EXTENSION pltcl
or
CREATE EXTENSION pltclu
.