Thread: Loading 7.4 dump to 8.1 with user-custom search_path breaks

Loading 7.4 dump to 8.1 with user-custom search_path breaks

From
"Jim C. Nasby"
Date:
From a 7.4 dump:

decibel@fritz.2[23:08]~:90>grep search_path fritz-20051106.sql
ALTER USER decibel SET search_path TO 'decibel, rrs, rrd, page_log, public';

Trying that command in psql...

decibel=# ALTER USER decibel SET search_path TO 'decibel, rrs, rrd,
page_log, public';
NOTICE:  schema "decibel, rrs, rrd, page_log, public" does not exist
ALTER ROLE
decibel=# \d
No relations found.
decibel=# show search_path;          search_path            
----------------------------------"decibel, rrs, page_log, public"
(1 row)

decibel=# 

There are tables in the database...

Something else that struck me looking at some errors from this restore;
would it be a good idea to come up with some kind of dedicated
API/interface for dump to use so that it's not as vulnerable to these
kind of issues?  For example, this dumpall has:

DELETE FROM pg_shadow WHERE usesysid <> (SELECT datdba FROM pg_database
WHERE datname = 'template0');

before all the CREATE USER statements. Problem with that is:

psql:fritz-20051106.sql:11: ERROR:  cannot delete from a view

Granted, this could be handled by creating the needed rules on that
view, but ISTM it would be better if instead we had a function like
pg_delete_all_users that dump called instead. For most of the dump this
isn't much of an issue, because it uses standard commands that we're
really careful about not breaking backwards compatability on.
-- 
Jim C. Nasby, Sr. Engineering Consultant      jnasby@pervasive.com
Pervasive Software      http://pervasive.com    work: 512-231-6117
vcard: http://jim.nasby.net/pervasive.vcf       cell: 512-569-9461


Re: Loading 7.4 dump to 8.1 with user-custom search_path

From
Christopher Kings-Lynne
Date:
> decibel@fritz.2[23:08]~:90>grep search_path fritz-20051106.sql
> ALTER USER decibel SET search_path TO 'decibel, rrs, rrd, page_log, public';
> 
> Trying that command in psql...
> 
> decibel=# ALTER USER decibel SET search_path TO 'decibel, rrs, rrd,
> page_log, public';
> NOTICE:  schema "decibel, rrs, rrd, page_log, public" does not exist
> ALTER ROLE
> decibel=# \d
> No relations found.
> decibel=# show search_path;
>            search_path            
> ----------------------------------
>  "decibel, rrs, page_log, public"
> (1 row)
> 
> decibel=# 

Yes, that's all fixed in the 8.0 and higher pg_dump.  Use the 8.1 dump 
to dump your 7.4 database.

> Something else that struck me looking at some errors from this restore;
> would it be a good idea to come up with some kind of dedicated
> API/interface for dump to use so that it's not as vulnerable to these
> kind of issues?  For example, this dumpall has:
> 
> DELETE FROM pg_shadow WHERE usesysid <> (SELECT datdba FROM pg_database
> WHERE datname = 'template0');
> 
> before all the CREATE USER statements. Problem with that is:
> 
> psql:fritz-20051106.sql:11: ERROR:  cannot delete from a view
> 
> Granted, this could be handled by creating the needed rules on that
> view, but ISTM it would be better if instead we had a function like
> pg_delete_all_users that dump called instead. For most of the dump this
> isn't much of an issue, because it uses standard commands that we're
> really careful about not breaking backwards compatability on.

I believe this is all done in 8.1 pg_dump.

Chris