late binding of shared libs for C functions

2018-06-12 Thread Geoff Winkless
Hi All

Is it possible to use CREATE FUNCTION to link a shared library that
doesn't yet exist? I don't think it is, but I might be missing
something.

If not, would it be something that people would be open to a patch
for? I'm thinking of e.g.

CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = }
default_expr ] [, ...] ] )
[ RETURNS rettype
  | RETURNS TABLE ( column_name column_type [, ...] ) ]
  { LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
-| AS 'obj_file', 'link_symbol'
+| AS 'obj_file', 'link_symbol' [UNBOUNDED]
 } ...
[ WITH ( attribute [, ...] ) ]


(I know UNBOUNDED isn't quite the word - BINDLATE would be better -
but I figured I should try to use an existing reserved keyword...)

We run our SQL scripts before we install binaries (because our
binaries are started by the installer, so having the database in place
is a Good Thing). The binary installer includes the .so. We're now
stuck in a catch-22 where I can't run the SQL script because it
requires the .so to be in place, but I can't run the binary installer
because if I do the SQL won't be updated...

This specific problem is obviously workaround-able, but it occurred to
me that since the libraries are bound late anyway it seems like this
wouldn't cause any serious problems.

Of course chances are I've missed something...

Geoff



late binding of shared libs for C functions

2018-06-12 Thread Geoff Winkless
Hi All

Is it possible to use CREATE FUNCTION to link a shared library that
doesn't yet exist? I don't think it is, but I might be missing
something.

If not, would it be something that people would be open to a patch
for? I'm thinking of e.g.

CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = }
default_expr ] [, ...] ] )
[ RETURNS rettype
  | RETURNS TABLE ( column_name column_type [, ...] ) ]
  { LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
-| AS 'obj_file', 'link_symbol'
+| AS 'obj_file', 'link_symbol' [UNBOUNDED]
 } ...
[ WITH ( attribute [, ...] ) ]


(I know UNBOUNDED isn't quite the word - BINDLATE would be better -
but I figured I should try to use an existing reserved keyword...)

We run our SQL scripts before we install binaries (because our
binaries are started by the installer, so having the database in place
is a Good Thing). The binary installer includes the .so. We're now
stuck in a catch-22 where I can't run the SQL script because it
requires the .so to be in place, but I can't run the binary installer
because if I do the SQL won't be updated...

This specific problem is obviously workaround-able, but it occurred to
me that since the libraries are bound late anyway it seems like this
wouldn't cause any serious problems.

Of course chances are I've missed something...

Geoff



Re: late binding of shared libs for C functions

2018-06-12 Thread Komяpa
This thing also bites PostGIS upgrades.

When distro's packaging system decides to upgrade PostGIS, or both
Postgres/PostGIS at the same time, you may often get to a situation when
you only have one version of PostGIS .so installed, and it's not the one
referenced in catalog. There are workarounds that tell you to symlink a
newer PostGIS .so file to the spot an older one is being looked for, and
then do ALTER EXTENSION UPGRADE to get out of this inconsistent state.

This also means PostGIS has to ship stubs for all the functions that should
have been deleted, but may be needed during such hacky upgrade process.
For example,
https://github.com/postgis/postgis/blob/16270b9352e84bc989b9b946d279f16e0de5c2b9/postgis/lwgeom_accum.c#L55


вт, 12 июн. 2018 г. в 13:48, Geoff Winkless :

> Hi All
>
> Is it possible to use CREATE FUNCTION to link a shared library that
> doesn't yet exist? I don't think it is, but I might be missing
> something.
>
> If not, would it be something that people would be open to a patch
> for? I'm thinking of e.g.
>
> CREATE [ OR REPLACE ] FUNCTION
> name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = }
> default_expr ] [, ...] ] )
> [ RETURNS rettype
>   | RETURNS TABLE ( column_name column_type [, ...] ) ]
>   { LANGUAGE lang_name
> | TRANSFORM { FOR TYPE type_name } [, ... ]
> | WINDOW
> | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
> | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
> | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
> | PARALLEL { UNSAFE | RESTRICTED | SAFE }
> | COST execution_cost
> | ROWS result_rows
> | SET configuration_parameter { TO value | = value | FROM CURRENT }
> | AS 'definition'
> -| AS 'obj_file', 'link_symbol'
> +| AS 'obj_file', 'link_symbol' [UNBOUNDED]
>  } ...
> [ WITH ( attribute [, ...] ) ]
>
>
> (I know UNBOUNDED isn't quite the word - BINDLATE would be better -
> but I figured I should try to use an existing reserved keyword...)
>
> We run our SQL scripts before we install binaries (because our
> binaries are started by the installer, so having the database in place
> is a Good Thing). The binary installer includes the .so. We're now
> stuck in a catch-22 where I can't run the SQL script because it
> requires the .so to be in place, but I can't run the binary installer
> because if I do the SQL won't be updated...
>
> This specific problem is obviously workaround-able, but it occurred to
> me that since the libraries are bound late anyway it seems like this
> wouldn't cause any serious problems.
>
> Of course chances are I've missed something...
>
> Geoff
>
>


Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Dunstan




On 06/12/2018 06:48 AM, Geoff Winkless wrote:

Hi All

Is it possible to use CREATE FUNCTION to link a shared library that
doesn't yet exist? I don't think it is, but I might be missing
something.

If not, would it be something that people would be open to a patch
for? I'm thinking of e.g.

CREATE [ OR REPLACE ] FUNCTION
 name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = }
default_expr ] [, ...] ] )
 [ RETURNS rettype
   | RETURNS TABLE ( column_name column_type [, ...] ) ]
   { LANGUAGE lang_name
 | TRANSFORM { FOR TYPE type_name } [, ... ]
 | WINDOW
 | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
 | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
 | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
 | PARALLEL { UNSAFE | RESTRICTED | SAFE }
 | COST execution_cost
 | ROWS result_rows
 | SET configuration_parameter { TO value | = value | FROM CURRENT }
 | AS 'definition'
-| AS 'obj_file', 'link_symbol'
+| AS 'obj_file', 'link_symbol' [UNBOUNDED]
  } ...
 [ WITH ( attribute [, ...] ) ]


(I know UNBOUNDED isn't quite the word - BINDLATE would be better -
but I figured I should try to use an existing reserved keyword...)



UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.

Perhaps something like NO CHECK would meet the case, i.e. we're not 
checking the link at function creation time.


I haven't thought through the other implications yet.

cheers

andrew

--
Andrew Dunstanhttps://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Gierth
> "Andrew" == Andrew Dunstan  writes:

 Andrew> Perhaps something like NO CHECK would meet the case, i.e. we're
 Andrew> not checking the link at function creation time.

The real question is why check_function_bodies doesn't cover this;
there's a comment in fmgr_c_validator that this is deliberate, but it's
rather unclear what the advantage is supposed to be:

 * It'd be most consistent to skip the check if !check_function_bodies,
 * but the purpose of that switch is to be helpful for pg_dump loading,
 * and for pg_dump loading it's much better if we *do* check.

-- 
Andrew (irc:RhodiumToad)



Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Dunstan




On 06/12/2018 08:46 AM, Andrew Gierth wrote:

"Andrew" == Andrew Dunstan  writes:

  Andrew> Perhaps something like NO CHECK would meet the case, i.e. we're
  Andrew> not checking the link at function creation time.

The real question is why check_function_bodies doesn't cover this;
there's a comment in fmgr_c_validator that this is deliberate, but it's
rather unclear what the advantage is supposed to be:

  * It'd be most consistent to skip the check if !check_function_bodies,
  * but the purpose of that switch is to be helpful for pg_dump loading,
  * and for pg_dump loading it's much better if we *do* check.





Maybe we need a function that will validate all the links, that could be 
called after everything is installed.


cheers

andrew

--
Andrew Dunstanhttps://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




Re: late binding of shared libs for C functions

2018-06-12 Thread Tom Lane
Andrew Gierth  writes:
> The real question is why check_function_bodies doesn't cover this;
> there's a comment in fmgr_c_validator that this is deliberate, but it's
> rather unclear what the advantage is supposed to be:

Error detection, ie did you spell the C symbol name correctly.

regards, tom lane



Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Gierth
> "Tom" == Tom Lane  writes:

 > Andrew Gierth  writes:
 >> The real question is why check_function_bodies doesn't cover this;
 >> there's a comment in fmgr_c_validator that this is deliberate, but it's
 >> rather unclear what the advantage is supposed to be:

 Tom> Error detection, ie did you spell the C symbol name correctly.

Right, but surely restoring a dump is not the place to be doing that
error check?

-- 
Andrew (irc:RhodiumToad)



Re: late binding of shared libs for C functions

2018-06-12 Thread Komяpa
>
>  >> The real question is why check_function_bodies doesn't cover this;
>  >> there's a comment in fmgr_c_validator that this is deliberate, but it's
>  >> rather unclear what the advantage is supposed to be:
>
>  Tom> Error detection, ie did you spell the C symbol name correctly.
>
> Right, but surely restoring a dump is not the place to be doing that
> error check?
>


Similar check also happens on pg_upgrade in link mode. It would be more
useful to get it to attempt to upgrade the extension if there is absent
function or absent library error.


Re: late binding of shared libs for C functions

2018-06-12 Thread Geoff Winkless
On Tue, 12 Jun 2018 at 13:41, Andrew Dunstan
 wrote:
> On 06/12/2018 06:48 AM, Geoff Winkless wrote:
> > +| AS 'obj_file', 'link_symbol' [UNBOUNDED]
> > (I know UNBOUNDED isn't quite the word - BINDLATE would be better -
> > but I figured I should try to use an existing reserved keyword...)
>
> UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.

Indeed. I agree.

> Perhaps something like NO CHECK would meet the case, i.e. we're not
> checking the link at function creation time.

I did wonder about "NO CHECK" but wasn't sure if having two words
would make the parser change more complex.

Geoff



Re: late binding of shared libs for C functions

2018-06-12 Thread Christian Ullrich

* On 2018-06-12 16:35, Geoff Winkless wrote:


On Tue, 12 Jun 2018 at 13:41, Andrew Dunstan wrote:



UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.


Indeed. I agree.


Perhaps something like NO CHECK would meet the case, i.e. we're not
checking the link at function creation time.


I did wonder about "NO CHECK" but wasn't sure if having two words
would make the parser change more complex.


DEFERRED?

--
Christian




Re: late binding of shared libs for C functions

2018-06-12 Thread Geoff Winkless
On Tue, 12 Jun 2018 at 15:44, Christian Ullrich  wrote:
> > I did wonder about "NO CHECK" but wasn't sure if having two words
> > would make the parser change more complex.
>
> DEFERRED?

That's a good shout. I wouldn't mind either of those choices.

So can I assume at least that no-one has an objection to the general principle?

I don't currently have a PG dev environment set up so it's non-trivial
for me to implement, which I'm ok with but not if I'm just wasting my
(and everyone else's) time :)

Cheers

Geoff



Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Dunstan




On 06/12/2018 11:09 AM, Geoff Winkless wrote:

On Tue, 12 Jun 2018 at 15:44, Christian Ullrich  wrote:

I did wonder about "NO CHECK" but wasn't sure if having two words
would make the parser change more complex.

DEFERRED?

That's a good shout. I wouldn't mind either of those choices.

So can I assume at least that no-one has an objection to the general principle?

I don't currently have a PG dev environment set up so it's non-trivial
for me to implement, which I'm ok with but not if I'm just wasting my
(and everyone else's) time :)





I would wait a little while. The idea's only been floated for a few hours.

cheers

andrew

--
Andrew Dunstanhttps://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




Re: late binding of shared libs for C functions

2018-06-12 Thread Andres Freund
On 2018-06-12 15:05:16 +0100, Andrew Gierth wrote:
> > "Tom" == Tom Lane  writes:
> 
>  > Andrew Gierth  writes:
>  >> The real question is why check_function_bodies doesn't cover this;
>  >> there's a comment in fmgr_c_validator that this is deliberate, but it's
>  >> rather unclear what the advantage is supposed to be:
> 
>  Tom> Error detection, ie did you spell the C symbol name correctly.
> 
> Right, but surely restoring a dump is not the place to be doing that
> error check?

I'm not convinced that that's true.  Checking that the target system has
the right shared library [version] installed isn't crazy, and you can't
do it at dump time.

If I wanted to do something about it - which I don't really - I'd argue
that check_function_bodies should become an enum or such.

Greetings,

Andres Freund



Re: late binding of shared libs for C functions

2018-06-14 Thread Robert Haas
On Tue, Jun 12, 2018 at 8:41 AM, Andrew Dunstan
 wrote:
> UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.
>
> Perhaps something like NO CHECK would meet the case, i.e. we're not checking
> the link at function creation time.
>
> I haven't thought through the other implications yet.

It seems like it might be better to control this through a GUC than
dedicated syntax, because you probably want it for purposes of
restoring an otherwise-unrestorable dump, and you want to make the
decision at restore time, not dump time.  If it's a GUC, that's a lot
easier than if you have to edit the dump.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: late binding of shared libs for C functions

2018-06-12 Thread Komяpa
This thing also bites PostGIS upgrades.

When distro's packaging system decides to upgrade PostGIS, or both
Postgres/PostGIS at the same time, you may often get to a situation when
you only have one version of PostGIS .so installed, and it's not the one
referenced in catalog. There are workarounds that tell you to symlink a
newer PostGIS .so file to the spot an older one is being looked for, and
then do ALTER EXTENSION UPGRADE to get out of this inconsistent state.

This also means PostGIS has to ship stubs for all the functions that should
have been deleted, but may be needed during such hacky upgrade process.
For example,
https://github.com/postgis/postgis/blob/16270b9352e84bc989b9b946d279f16e0de5c2b9/postgis/lwgeom_accum.c#L55


вт, 12 июн. 2018 г. в 13:48, Geoff Winkless :

> Hi All
>
> Is it possible to use CREATE FUNCTION to link a shared library that
> doesn't yet exist? I don't think it is, but I might be missing
> something.
>
> If not, would it be something that people would be open to a patch
> for? I'm thinking of e.g.
>
> CREATE [ OR REPLACE ] FUNCTION
> name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = }
> default_expr ] [, ...] ] )
> [ RETURNS rettype
>   | RETURNS TABLE ( column_name column_type [, ...] ) ]
>   { LANGUAGE lang_name
> | TRANSFORM { FOR TYPE type_name } [, ... ]
> | WINDOW
> | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
> | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
> | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
> | PARALLEL { UNSAFE | RESTRICTED | SAFE }
> | COST execution_cost
> | ROWS result_rows
> | SET configuration_parameter { TO value | = value | FROM CURRENT }
> | AS 'definition'
> -| AS 'obj_file', 'link_symbol'
> +| AS 'obj_file', 'link_symbol' [UNBOUNDED]
>  } ...
> [ WITH ( attribute [, ...] ) ]
>
>
> (I know UNBOUNDED isn't quite the word - BINDLATE would be better -
> but I figured I should try to use an existing reserved keyword...)
>
> We run our SQL scripts before we install binaries (because our
> binaries are started by the installer, so having the database in place
> is a Good Thing). The binary installer includes the .so. We're now
> stuck in a catch-22 where I can't run the SQL script because it
> requires the .so to be in place, but I can't run the binary installer
> because if I do the SQL won't be updated...
>
> This specific problem is obviously workaround-able, but it occurred to
> me that since the libraries are bound late anyway it seems like this
> wouldn't cause any serious problems.
>
> Of course chances are I've missed something...
>
> Geoff
>
>


Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Dunstan




On 06/12/2018 06:48 AM, Geoff Winkless wrote:

Hi All

Is it possible to use CREATE FUNCTION to link a shared library that
doesn't yet exist? I don't think it is, but I might be missing
something.

If not, would it be something that people would be open to a patch
for? I'm thinking of e.g.

CREATE [ OR REPLACE ] FUNCTION
 name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = }
default_expr ] [, ...] ] )
 [ RETURNS rettype
   | RETURNS TABLE ( column_name column_type [, ...] ) ]
   { LANGUAGE lang_name
 | TRANSFORM { FOR TYPE type_name } [, ... ]
 | WINDOW
 | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
 | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
 | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
 | PARALLEL { UNSAFE | RESTRICTED | SAFE }
 | COST execution_cost
 | ROWS result_rows
 | SET configuration_parameter { TO value | = value | FROM CURRENT }
 | AS 'definition'
-| AS 'obj_file', 'link_symbol'
+| AS 'obj_file', 'link_symbol' [UNBOUNDED]
  } ...
 [ WITH ( attribute [, ...] ) ]


(I know UNBOUNDED isn't quite the word - BINDLATE would be better -
but I figured I should try to use an existing reserved keyword...)



UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.

Perhaps something like NO CHECK would meet the case, i.e. we're not 
checking the link at function creation time.


I haven't thought through the other implications yet.

cheers

andrew

--
Andrew Dunstanhttps://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Gierth
> "Andrew" == Andrew Dunstan  writes:

 Andrew> Perhaps something like NO CHECK would meet the case, i.e. we're
 Andrew> not checking the link at function creation time.

The real question is why check_function_bodies doesn't cover this;
there's a comment in fmgr_c_validator that this is deliberate, but it's
rather unclear what the advantage is supposed to be:

 * It'd be most consistent to skip the check if !check_function_bodies,
 * but the purpose of that switch is to be helpful for pg_dump loading,
 * and for pg_dump loading it's much better if we *do* check.

-- 
Andrew (irc:RhodiumToad)



Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Dunstan




On 06/12/2018 08:46 AM, Andrew Gierth wrote:

"Andrew" == Andrew Dunstan  writes:

  Andrew> Perhaps something like NO CHECK would meet the case, i.e. we're
  Andrew> not checking the link at function creation time.

The real question is why check_function_bodies doesn't cover this;
there's a comment in fmgr_c_validator that this is deliberate, but it's
rather unclear what the advantage is supposed to be:

  * It'd be most consistent to skip the check if !check_function_bodies,
  * but the purpose of that switch is to be helpful for pg_dump loading,
  * and for pg_dump loading it's much better if we *do* check.





Maybe we need a function that will validate all the links, that could be 
called after everything is installed.


cheers

andrew

--
Andrew Dunstanhttps://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




Re: late binding of shared libs for C functions

2018-06-12 Thread Tom Lane
Andrew Gierth  writes:
> The real question is why check_function_bodies doesn't cover this;
> there's a comment in fmgr_c_validator that this is deliberate, but it's
> rather unclear what the advantage is supposed to be:

Error detection, ie did you spell the C symbol name correctly.

regards, tom lane



Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Gierth
> "Tom" == Tom Lane  writes:

 > Andrew Gierth  writes:
 >> The real question is why check_function_bodies doesn't cover this;
 >> there's a comment in fmgr_c_validator that this is deliberate, but it's
 >> rather unclear what the advantage is supposed to be:

 Tom> Error detection, ie did you spell the C symbol name correctly.

Right, but surely restoring a dump is not the place to be doing that
error check?

-- 
Andrew (irc:RhodiumToad)



Re: late binding of shared libs for C functions

2018-06-12 Thread Komяpa
>
>  >> The real question is why check_function_bodies doesn't cover this;
>  >> there's a comment in fmgr_c_validator that this is deliberate, but it's
>  >> rather unclear what the advantage is supposed to be:
>
>  Tom> Error detection, ie did you spell the C symbol name correctly.
>
> Right, but surely restoring a dump is not the place to be doing that
> error check?
>


Similar check also happens on pg_upgrade in link mode. It would be more
useful to get it to attempt to upgrade the extension if there is absent
function or absent library error.


Re: late binding of shared libs for C functions

2018-06-12 Thread Geoff Winkless
On Tue, 12 Jun 2018 at 13:41, Andrew Dunstan
 wrote:
> On 06/12/2018 06:48 AM, Geoff Winkless wrote:
> > +| AS 'obj_file', 'link_symbol' [UNBOUNDED]
> > (I know UNBOUNDED isn't quite the word - BINDLATE would be better -
> > but I figured I should try to use an existing reserved keyword...)
>
> UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.

Indeed. I agree.

> Perhaps something like NO CHECK would meet the case, i.e. we're not
> checking the link at function creation time.

I did wonder about "NO CHECK" but wasn't sure if having two words
would make the parser change more complex.

Geoff



Re: late binding of shared libs for C functions

2018-06-12 Thread Christian Ullrich

* On 2018-06-12 16:35, Geoff Winkless wrote:


On Tue, 12 Jun 2018 at 13:41, Andrew Dunstan wrote:



UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.


Indeed. I agree.


Perhaps something like NO CHECK would meet the case, i.e. we're not
checking the link at function creation time.


I did wonder about "NO CHECK" but wasn't sure if having two words
would make the parser change more complex.


DEFERRED?

--
Christian




Re: late binding of shared libs for C functions

2018-06-12 Thread Geoff Winkless
On Tue, 12 Jun 2018 at 15:44, Christian Ullrich  wrote:
> > I did wonder about "NO CHECK" but wasn't sure if having two words
> > would make the parser change more complex.
>
> DEFERRED?

That's a good shout. I wouldn't mind either of those choices.

So can I assume at least that no-one has an objection to the general principle?

I don't currently have a PG dev environment set up so it's non-trivial
for me to implement, which I'm ok with but not if I'm just wasting my
(and everyone else's) time :)

Cheers

Geoff



Re: late binding of shared libs for C functions

2018-06-12 Thread Andrew Dunstan




On 06/12/2018 11:09 AM, Geoff Winkless wrote:

On Tue, 12 Jun 2018 at 15:44, Christian Ullrich  wrote:

I did wonder about "NO CHECK" but wasn't sure if having two words
would make the parser change more complex.

DEFERRED?

That's a good shout. I wouldn't mind either of those choices.

So can I assume at least that no-one has an objection to the general principle?

I don't currently have a PG dev environment set up so it's non-trivial
for me to implement, which I'm ok with but not if I'm just wasting my
(and everyone else's) time :)





I would wait a little while. The idea's only been floated for a few hours.

cheers

andrew

--
Andrew Dunstanhttps://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




Re: late binding of shared libs for C functions

2018-06-12 Thread Andres Freund
On 2018-06-12 15:05:16 +0100, Andrew Gierth wrote:
> > "Tom" == Tom Lane  writes:
> 
>  > Andrew Gierth  writes:
>  >> The real question is why check_function_bodies doesn't cover this;
>  >> there's a comment in fmgr_c_validator that this is deliberate, but it's
>  >> rather unclear what the advantage is supposed to be:
> 
>  Tom> Error detection, ie did you spell the C symbol name correctly.
> 
> Right, but surely restoring a dump is not the place to be doing that
> error check?

I'm not convinced that that's true.  Checking that the target system has
the right shared library [version] installed isn't crazy, and you can't
do it at dump time.

If I wanted to do something about it - which I don't really - I'd argue
that check_function_bodies should become an enum or such.

Greetings,

Andres Freund



Re: late binding of shared libs for C functions

2018-06-14 Thread Robert Haas
On Tue, Jun 12, 2018 at 8:41 AM, Andrew Dunstan
 wrote:
> UNBOUNDED would be terrible. It does not mean the same thing as UNBOUND.
>
> Perhaps something like NO CHECK would meet the case, i.e. we're not checking
> the link at function creation time.
>
> I haven't thought through the other implications yet.

It seems like it might be better to control this through a GUC than
dedicated syntax, because you probably want it for purposes of
restoring an otherwise-unrestorable dump, and you want to make the
decision at restore time, not dump time.  If it's a GUC, that's a lot
easier than if you have to edit the dump.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company