Вся предоставленная на этом сервере информация собрана нами из разных источников. Если Вам кажется, что публикация каких-то документов нарушает чьи-либо авторские права, сообщите нам об этом.
After you have created and registered a user-defined
function, your work is essentially done.
Postgres,
however, must load the object code
(e.g., a .o file, or
a shared library) that implements your function. As
previously mentioned, Postgres
loads your code at
runtime, as required. In order to allow your code to be
dynamically loaded, you may have to compile and
link-edit it in a special way. This section briefly
describes how to perform the compilation and
link-editing required before you can load your user-defined
functions into a running Postgres server.
You should expect to read (and reread, and re-reread) the
manual pages for the C compiler, cc(1), and the link
editor, ld(1), if you have specific questions. In
addition, the contrib area (PGROOT/contrib)
and the regression test suites in the directory
PGROOT/src/test/regress contain several
working examples of this process. If you copy an example then
you should not have any problems.
The following terminology will be used below:
Dynamic loading
is what Postgres does to an object file. The
object file is copied into the running Postgres
server and the functions and variables within the
file are made available to the functions within
the Postgres process.
Postgres does this using
the dynamic loading mechanism provided by the
operating system.
Loading and link editing
is what you do to an object file in order to produce
another kind of object file (e.g., an executable
program or a shared library). You perform
this using the link editing program, ld(1).
The following general restrictions and notes also apply
to the discussion below:
Paths given to the create function command must be
absolute paths (i.e., start with "/") that refer to
directories visible on the machine on which the
Postgres server is running.
Tip: Relative paths do in fact work,
but are relative to
the directory where the database resides (which is generally
invisible to the frontend application). Obviously, it makes
no sense to make the path relative to the directory in which
the user started the frontend application, since the server
could be running on a completely different machine!
The Postgres user must be able to traverse the path
given to the create function command and be able to
read the object file. This is because the Postgres
server runs as the Postgres user, not as the user
who starts up the frontend process. (Making the
file or a higher-level directory unreadable and/or
unexecutable by the "postgres" user is an extremely
common mistake.)
Symbol names defined within object files must not
conflict with each other or with symbols defined in
Postgres.
The GNU C compiler usually does not provide the special
options that are required to use the operating
system's dynamic loader interface. In such cases,
the C compiler that comes with the operating system
must be used.