Re: Using ALTER TABLESPACE in pg_dump - Mailing list pgsql-hackers

From Gavin Sherry
Subject Re: Using ALTER TABLESPACE in pg_dump
Date
Msg-id Pine.LNX.4.58.0411011055150.31438@linuxworld.com.au
Whole thread Raw
In response to Re: Using ALTER TABLESPACE in pg_dump  (Bruce Momjian <pgman@candle.pha.pa.us>)
Responses Re: Using ALTER TABLESPACE in pg_dump
Re: Using ALTER TABLESPACE in pg_dump
List pgsql-hackers
On Sun, 31 Oct 2004, Bruce Momjian wrote:

> Tom Lane wrote:
> > I wrote:
> > > I'd be willing to jump this way if we can work out the
> > > default-tablespace inconsistencies that Bruce has on the open items
> > > list.
> >
> > After further thought it seems to me that using a default_tablespace
> > GUC variable doesn't eliminate all the open issues.  In particular
> > it is no help for the problem of merging two different tablespaces
> > during CREATE DATABASE, ie, creating a new DB with a dattablespace
> > that is different from the template DB's default when the template
> > DB already has some tables explicitly placed into that tablespace.
> > In this situation we have the problem that the cloned DB would
> > have pg_class rows with different references to the same tablespace
> > (either zero for the database default, or the explicit OID of the
> > tablespace).  Among other things this would make it impossible to
> > use the cloned DB again as a template for CREATE DATABASE.
>
> Right.  I would say 99% of people are using template1 as the template
> for new databases, and if we clearly give an error message when they use
> a database not in the default tablespace (which we do now), it seems
> just fine.  Let's see how many people complain and make adjustments in
> 8.1 if needed.

I agree.

>
> > AFAICS this problem stems ultimately from the choice to have a
> > special representation (zero) in pg_class for the database's default
> > tablespace.  The only way to really get rid of it would be to eliminate
> > that provision and say that pg_class.reltablespace is always the correct
> > explicit OID.  What that would mean in turn is that we could not copy a
> > database and move its tables into a different tablespace, at least not
> > without very major work on CREATE DATABASE to make it alter pg_class
> > on-the-fly while copying.
>
> Agreed.  That is just too much work for so little gain.

I agree. Although, I think having a createdb() with transaction semantics
and the ability to modify data on the fly would be useful -- not just for
tablespace handling. As you say, it is a fair bit of work, however.

>
> > We might want to think about doing that eventually, but for now I'd
> > say that the restriction on merging tablespaces is just something
> > we have to live with.  It's less annoying than not being able to
> > relocate a database, for sure.
>
> One downside that came up yesterday in a discussion is that once shemas
> don't have default tablespaces we can't easily have default tablespaces
> for toast and temporary table system schemas.  Now we can't actually do
> that now anyway because they are created by the system but it might
> limit how we can control these in the future.  I am just throwing this
> out as a point.

Neil has been talking to me about being able to set a tablespace for
temporary tables at or after create database time.

I'm not sure about TOAST however. I considered the idea of adding
something to CREATE TABLE like TOASTSPACE <tablespace>, such that all
TOAST tables would be put in the 'toastspace'. But I think the syntax is
ugly and would confuse many users who do not know what toast is.

Thanks,

Gavin


pgsql-hackers by date:

Previous
From: Gaetano Mendola
Date:
Subject: Re: Suggestion: additional system views
Next
From: Bruce Momjian
Date:
Subject: Re: Using ALTER TABLESPACE in pg_dump