Thread: Re: [COMMITTERS] pgsql/ oc/src/sgml/runtime.sgml rc/backend/uti ...

Re: [COMMITTERS] pgsql/ oc/src/sgml/runtime.sgml rc/backend/uti ...

From
Tom Lane
Date:
Peter Eisentraut - PostgreSQL <petere@hub.org> writes:
>     Add dynamic_library_path parameter and automatic appending of shared
>     library extension.

Looks good.  One tiny nit: I think that DLSUFFIX should be appended if
the given basename doesn't contain any '.', rather than first trying
the name as-is.  The problem with doing the latter is that the presence
of a file or subdirectory named "foo" would prevent us from loading
"foo.so" correctly.

Looking ahead, there's a lot of subsidiary work that should now happen:

1. createlang should no longer insert libdir or dlsuffix into the
function declarations it makes (so building createlang from
createlang.sh won't be necessary anymore).

2. Likewise for CREATE FUNCTION commands in regress tests.

3. CREATE FUNCTION documentation should now recommend using relative
path and omitting suffix, rather than using full absolute pathname.
Update examples in SGML docs, src/tutorial/.

Maybe some other places too.  Are you planning to do all that, or should
we put it on the to-do list for someone else?
        regards, tom lane


Re: [COMMITTERS] pgsql/ oc/src/sgml/runtime.sgml rc/backend/uti ...

From
Peter Eisentraut
Date:
Tom Lane writes:

> Looks good.  One tiny nit: I think that DLSUFFIX should be appended if
> the given basename doesn't contain any '.', rather than first trying
> the name as-is.

That won't work if the basename already contains a '.', as is possible if
some version is embedded in the library name.  Libtool sometimes creates
such libraries.

> The problem with doing the latter is that the presence of a file or
> subdirectory named "foo" would prevent us from loading "foo.so"
> correctly.

Perhaps we should try appending the extension first?  This would model
libtool's libltdl more closely.  If we encourage leaving off the extension
in load commands then this could be the better way.  Of course we could
also check if the candidate file is a real file first.

> 1. createlang should no longer insert libdir or dlsuffix into the
> function declarations it makes

How do we handle the case where the user changed the path?  Do we say,
"$libdir needs to be in the path or you're on your own"?

I like this better:  Let createlang set the path to '$libdir/plpgsql.so'
(literally) and substitute $libdir independend of the current mechanism.
That would survive an update.

> 2. Likewise for CREATE FUNCTION commands in regress tests.

I'd prefer to keep a few variations of each.

> 3. CREATE FUNCTION documentation should now recommend using relative
> path and omitting suffix, rather than using full absolute pathname.
> Update examples in SGML docs, src/tutorial/.

The create function ref page needs some editorial changes which I will get
to in the next few days.

-- 
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter



Peter Eisentraut <peter_e@gmx.net> writes:
>> 1. createlang should no longer insert libdir or dlsuffix into the
>> function declarations it makes

> How do we handle the case where the user changed the path?  Do we say,
> "$libdir needs to be in the path or you're on your own"?

Seems OK to me, but ...

> I like this better:  Let createlang set the path to '$libdir/plpgsql.so'
> (literally) and substitute $libdir independend of the current mechanism.

'$libdir/plpgsql', please, no platform dependencies.  But OK otherwise.
        regards, tom lane


Re: [COMMITTERS] pgsql/ oc/src/sgml/runtime.sgml rc/backend/uti ...

From
Peter Eisentraut
Date:
Tom Lane writes:

> 1. createlang should no longer insert libdir or dlsuffix into the
> function declarations it makes (so building createlang from
> createlang.sh won't be necessary anymore).

createlang tries to be helpful by trying test -f $the_file first, to guard
against attempts to load PL/Tcl when no Tcl support was configured.  This
approach has a few other subtle flaws:  it requires createlang to be run
on the server machine and under the same user account as the server.
Maybe we could devise another way to determine gracefully whether a given
PL is installed.

> 2. Likewise for CREATE FUNCTION commands in regress tests.

The shared objects used in the regression test are not located relative to
the $libdir.  Some for the various tutorials, examples.

> 3. CREATE FUNCTION documentation should now recommend using relative
> path and omitting suffix, rather than using full absolute pathname.

Details in the Programmer's Guide now.

-- 
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter



Re: [COMMITTERS] pgsql/ oc/src/sgml/runtime.sgml rc/backend/uti ...

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> createlang tries to be helpful by trying test -f $the_file first, to guard
> against attempts to load PL/Tcl when no Tcl support was configured.  This
> approach has a few other subtle flaws:  it requires createlang to be run
> on the server machine and under the same user account as the server.
> Maybe we could devise another way to determine gracefully whether a given
> PL is installed.

Try eliminating the test entirely.  CREATE FUNCTION now checks to make
sure that it can find the specified library (and that the named function
exists therein), so as long as createlang aborts on CREATE FUNCTION
failure, I see no need for a separate test.

>> 2. Likewise for CREATE FUNCTION commands in regress tests.

> The shared objects used in the regression test are not located relative to
> the $libdir.  Some for the various tutorials, examples.

Duh.  Never mind that then ...
        regards, tom lane