1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-11 20:28:21 +03:00

> I can see a couple possible downsides: (a) the library might have some

> weird behavior across fork boundaries; (b) the additional memory space
> that has to be duplicated into child processes will cost something per
> child launch, even if the child never uses it.  But these are only
> arguments that it might not *always* be a prudent thing to do, not that
> we shouldn't give the DBA the tool to do it if he wants.  So fire away.

Here is a patch for the above, including a documentation update. It
creates a new GUC variable "preload_libraries", that accepts a list in
the form:

   preload_libraries = '$libdir/mylib1:initfunc,$libdir/mylib2'

If ":initfunc" is omitted or not found, no initialization function is
executed, but the library is still preloaded. If "$libdir/mylib" isn't
found, the postmaster refuses to start.

In my testing with PL/R, it reduces the first call to a PL/R function
(after connecting) from almost 2 seconds, down to about 8 ms.

Joe Conway
This commit is contained in:
Bruce Momjian
2003-03-20 04:51:44 +00:00
parent e733510d5d
commit 15ce2d2e4a
6 changed files with 141 additions and 5 deletions

View File

@ -1,5 +1,5 @@
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.171 2003/03/20 03:34:55 momjian Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.172 2003/03/20 04:51:44 momjian Exp $
-->
<Chapter Id="runtime">
@ -1799,6 +1799,35 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
</listitem>
</varlistentry>
<varlistentry>
<term><varname>PRELOAD_LIBRARIES</varname> (<type>string</type>)</term>
<indexterm><primary>preload_libraries</></>
<listitem>
<para>
This variable specifies one or more shared libraries that are to be
preloaded at Postmaster start. An initialization function can also be
optionally specified by adding a colon followed by the name of the
initialization function after the library name. For example
<literal>'$libdir/mylib:init_mylib'</literal> would cause <literal>mylib</>
to be preloaded and <literal>init_mylib</> to be executed. If more than
one library is to be loaded, they must be delimited with a comma.
</para>
<para>
If <literal>mylib</> is not found, the postmaster will fail to start.
However, if <literal>init_mylib</> is not found, <literal>mylib</> will
still be preloaded without executing the initialization function.
</para>
<para>
By preloading a shared library (and initializing it if applicable),
the library startup time is avoided when the library is used later in a
specific backend. However there is a cost in terms of memory duplication
as every backend is forked, whether or not the library is used.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>REGEX_FLAVOR</varname> (<type>string</type>)</term>
<indexterm><primary>regular expressions</></>