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.
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
provides no way to access internals of the database server or to
gain OS-level access under the permissions of the
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
(for untrusted Tcl). This is exactly the same language except that a full
Tcl interpreter is used.
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
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
call handlers is automatically built and
installed in the
directory if Tcl support is specified in the configuration step of
the installation procedure. To install
in a particular database, use the
command, for example
CREATE EXTENSION pltcl
CREATE EXTENSION pltclu