Re: Sequences not moved to new tablespace

Поиск
Список
Период
Сортировка
От Guillaume Drolet
Тема Re: Sequences not moved to new tablespace
Дата
Msg-id CAOkiyv4-5_kQfkHQX+=C858AwqHXLqy2o3-9YK+aARjC1vxQEw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Sequences not moved to new tablespace  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general


2015-02-24 10:32 GMT-05:00 Tom Lane <tgl@sss.pgh.pa.us>:
Adrian Klaver <adrian.klaver@aklaver.com> writes:
> On 02/24/2015 07:10 AM, Guillaume Drolet wrote:
>> That makes sense. I will give it a try. Thanks.

> Alright, now I am thoroughly confused:) I thought this is how you to
> this point, using the above commands to move from the non-default
> tablespace back to the default tablespace:

> "I moved all my tables and indexes from one tablespace to pg_default using

> ALTER TABLE ... SET TABLESPACE pg_default;
> ALTER INDEX ... SET TABLESPACE pg_default;"

> And that the issue was that sequences where not moved back.

I think part of the issue here is confusion over what "default" means.
pg_default refers to an installation's default tablespace, to wit
storage under the $PGDATA directory.  This is not necessarily the
same thing as a database's default tablespace, which might have been
set to something else.

We now know why Guillaume was having a problem with sequences: he built
his movement script on the basis of the pg_tables view, which does not
include sequences.  But in any case, if I'm understanding his desires
correctly, changing the database's default tablespace would have been
far easier and more reliable than manually moving tables one at a time.

For implementation reasons, ALTER DATABASE SET TABLESPACE refuses the
case where the database already has some tables that have been explicitly
placed into that tablespace.  (I forget the exact reason for this, but
it's got something to do with needing to preserve a distinction between
tables that have had a tablespace explicitly assigned and those that
are just inheriting the database's default tablespace.)  So the best
bet at this point seems to be to move everything back to the database's
original tablespace and then use ALTER DATABASE SET TABLESPACE.

If you're not sure what remains to move, try looking at the
pg_class.reltablespace column.  There will be a few entries with
tablespace 1664 (pg_global) which you can't and shouldn't move.
You want everything else to be shown as tablespace 0, which means
"use the database's default".

                        regards, tom lane

Thanks a lot Tom for this very useful clarification. I am indeed trying to move everything from a created tablespace to the installation's default directory (pg_default) under $PGDATA. When I first created the database I want to move, I had set the default tablespace to my created tablespace, diamonds.

Now with your explanations I understand why sequences and other tables where not moved: because of the pg_tables view. Based on these details, here's what I understand I should do now:

1) Run the SQL scripts for moving tables and indexes back to "diamonds"
3) Set database default tablespace to "diamonds": ALTER DATABASE SET default_tablespace = diamonds;
2) Check that nothing else but entries with reltablespace equal to 1664 remain in pg_class. Everything else should equal 0
4) Move the database to pg_default with: ALTER DATABASE mydb SET TABLESPACE pg_default;
5) DROP TABLESPACE diamonds;

Is this correct?

В списке pgsql-general по дате отправления:

Предыдущее
От: Guillaume Drolet
Дата:
Сообщение: Re: Sequences not moved to new tablespace
Следующее
От: Guillaume Drolet
Дата:
Сообщение: Re: Sequences not moved to new tablespace