Thread: pg_dump & table space
Hi, is there a way to dump an entire database which has a specific table space without having in the sql file any reference to the tablespace? This can be useful when moving the database from one machine to another (that does not use the tablespace). Any way to achieve that with pg_dump? Thanks, Luca
Luca Ferrari wrote: > Hi, > is there a way to dump an entire database which has a specific table space > without having in the sql file any reference to the tablespace? This can be > useful when moving the database from one machine to another (that does not use > the tablespace). Any way to achieve that with pg_dump? > dump in ascii format, edit the resultant SQL file and remove any references to the tablespace. this could probably be done with a perl or sed script if the file is too large for a conventional text editor.
John R Pierce wrote: > Luca Ferrari wrote: >> Hi, >> is there a way to dump an entire database which has a specific table >> space without having in the sql file any reference to the tablespace? >> This can be useful when moving the database from one machine to >> another (that does not use the tablespace). Any way to achieve that >> with pg_dump? >> > > dump in ascii format, edit the resultant SQL file and remove any > references to the tablespace. this could probably be done with a > perl or sed script if the file is too large for a conventional text > editor. oh, dump the schema only first, edit that, then dump the data only to a seperate dumpfile, thats probably simplest.
Luca Ferrari <fluca1978@infinito.it> writes: > is there a way to dump an entire database which has a specific table space > without having in the sql file any reference to the tablespace? This can be > useful when moving the database from one machine to another (that does not use > the tablespace). Any way to achieve that with pg_dump? Recent versions have --no-tablespaces do not dump tablespace assignments However, this is really just cosmetic, as the dump is set up like this: SET default_tablespace = whatever; CREATE TABLE whichever(...); If tablespace 'whatever' doesn't exist, you'll get an error on the SET but the CREATE will succeed anyway. (I guess this only works cleanly if the destination machine has *none* of the source's tablespaces, else things might get assigned to unexpected tablespaces. But it's definitely possible to restore a dump without having the same tablespaces.) regards, tom lane
Tom Lane wrote: > However, this is really just cosmetic, as the dump is set up like this: > > SET default_tablespace = whatever; > CREATE TABLE whichever(...); > > If tablespace 'whatever' doesn't exist, you'll get an error on the SET > but the CREATE will succeed anyway. (I guess this only works cleanly > if the destination machine has *none* of the source's tablespaces, > else things might get assigned to unexpected tablespaces. But it's > definitely possible to restore a dump without having the same > tablespaces.) Maybe it would be better if the dump has a RESET default_tablespace before the SET. -- Alvaro Herrera http://www.CommandPrompt.com/ PostgreSQL Replication, Consulting, Custom Development, 24x7 support