Re: [HACKERS] Not valid dump [8.2.9, 8.3.1]

2008-06-21 Thread Gaetano Mendola
On Fri, Jun 20, 2008 at 4:37 PM, Tom Lane [EMAIL PROTECTED] wrote:

 Gaetano Mendola [EMAIL PROTECTED] writes:
  we have faced lately dumps not valid, the bug can be replicated using a
 8.2.9 or
  a 8.3.1 server.

  These are the steps to create the database that will generate a not valid
 dump:

 This is a bug in your function: it will not work if the search path
 doesn't contain the public schema.  You'd be best advised to make it
 qualify the reference to t_public explicitly.


Yes, that's the way we are fixing it. Still I have a bitter taste being able
to
create a working database instance that doesn't generate a valid dump.

(Of course you realize that referencing any table at all in an
 immutable function is probably a mortal sin...)


Yes Tom I know, in our case that table is a lookup table, noone update,
delete, insert data in it, so from my point of view it is like I have
declared a
static array inside the function declaration.

-- 
cpp-today.blogspot.com


Re: [HACKERS] Not valid dump [8.2.9, 8.3.1]

2008-06-21 Thread Tom Lane
Gaetano Mendola [EMAIL PROTECTED] writes:
 On Fri, Jun 20, 2008 at 4:37 PM, Tom Lane [EMAIL PROTECTED] wrote:
 (Of course you realize that referencing any table at all in an
 immutable function is probably a mortal sin...)

 Yes Tom I know, in our case that table is a lookup table, noone update,
 delete, insert data in it, so from my point of view it is like I have
 declared a static array inside the function declaration.

No, you'd like to imagine that it is a static array, but that technique
is just a foot-gun waiting to bite you.  As an example, since pg_dump
has no idea that that function has any dependency on the lookup table,
there is nothing to stop it from trying to create the index before it's
populated the lookup table.

(I think it probably works for you at the moment because pg_dump tends
to fill all the tables before creating any indexes, but the planned
changes to support multi-threaded restores will certainly break your
case.)

regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Not valid dump [8.2.9, 8.3.1]

2008-06-21 Thread Andrew Dunstan



Tom Lane wrote:

Gaetano Mendola [EMAIL PROTECTED] writes:
  

On Fri, Jun 20, 2008 at 4:37 PM, Tom Lane [EMAIL PROTECTED] wrote:
(Of course you realize that referencing any table at all in an


immutable function is probably a mortal sin...)
  


  

Yes Tom I know, in our case that table is a lookup table, noone update,
delete, insert data in it, so from my point of view it is like I have
declared a static array inside the function declaration.



No, you'd like to imagine that it is a static array, but that technique
is just a foot-gun waiting to bite you.  As an example, since pg_dump
has no idea that that function has any dependency on the lookup table,
there is nothing to stop it from trying to create the index before it's
populated the lookup table.

(I think it probably works for you at the moment because pg_dump tends
to fill all the tables before creating any indexes, but the planned
changes to support multi-threaded restores will certainly break your
case.)


  


Purely static lookup tables can also often be replaced by enum types, 
often with significant efficiency gains.


cheers

andrew

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Not valid dump [8.2.9, 8.3.1]

2008-06-20 Thread Tom Lane
Gaetano Mendola [EMAIL PROTECTED] writes:
 we have faced lately dumps not valid, the bug can be replicated using a 8.2.9 
 or
 a 8.3.1 server.

 These are the steps to create the database that will generate a not valid 
 dump:

This is a bug in your function: it will not work if the search path
doesn't contain the public schema.  You'd be best advised to make it
qualify the reference to t_public explicitly.

In 8.3 another possibility would be to attach an explicit search_path
setting to the function.

(Of course you realize that referencing any table at all in an
immutable function is probably a mortal sin...)

regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers