Обсуждение: pgsql: Implement ALTER TABLE .. SET LOGGED / UNLOGGED

Поиск
Список
Период
Сортировка

pgsql: Implement ALTER TABLE .. SET LOGGED / UNLOGGED

От
Alvaro Herrera
Дата:
Implement ALTER TABLE .. SET LOGGED / UNLOGGED

This enables changing permanent (logged) tables to unlogged and
vice-versa.

(Docs for ALTER TABLE / SET TABLESPACE got shuffled in an order that
hopefully makes more sense than the original.)

Author: Fabrízio de Royes Mello
Reviewed by: Christoph Berg, Andres Freund, Thom Brown
Some tweaking by Álvaro Herrera

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/f41872d0c1239d36ab03393c39ec0b70e9ee2a3c

Modified Files
--------------
doc/src/sgml/ref/alter_table.sgml         |   64 ++++----
src/backend/commands/cluster.c            |   46 +++---
src/backend/commands/matview.c            |    9 +-
src/backend/commands/tablecmds.c          |  239 ++++++++++++++++++++++++++++-
src/backend/parser/gram.y                 |   17 +-
src/bin/psql/tab-complete.c               |    4 +-
src/include/commands/cluster.h            |    2 +-
src/include/nodes/parsenodes.h            |    2 +
src/include/parser/kwlist.h               |    1 +
src/test/regress/expected/alter_table.out |   91 +++++++++++
src/test/regress/sql/alter_table.sql      |   52 +++++++
11 files changed, 472 insertions(+), 55 deletions(-)


Re: pgsql: Implement ALTER TABLE .. SET LOGGED / UNLOGGED

От
Simon Riggs
Дата:
On 22 August 2014 19:30, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:

> Implement ALTER TABLE .. SET LOGGED / UNLOGGED
>
> This enables changing permanent (logged) tables to unlogged and
> vice-versa.
>
> (Docs for ALTER TABLE / SET TABLESPACE got shuffled in an order that
> hopefully makes more sense than the original.)

When moving from unlogged to logged, where do we remove the init fork?

Couldn't see the keywords fork or init anywhere in the patch, so maybe
its hidden somewhere.

--
 Simon Riggs                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


Re: pgsql: Implement ALTER TABLE .. SET LOGGED / UNLOGGED

От
Andres Freund
Дата:
On August 23, 2014 3:49:32 PM CEST, Simon Riggs <simon@2ndQuadrant.com> wrote:
>On 22 August 2014 19:30, Alvaro Herrera <alvherre@alvh.no-ip.org>
>wrote:
>
>> Implement ALTER TABLE .. SET LOGGED / UNLOGGED
>>
>> This enables changing permanent (logged) tables to unlogged and
>> vice-versa.
>>
>> (Docs for ALTER TABLE / SET TABLESPACE got shuffled in an order that
>> hopefully makes more sense than the original.)
>
>When moving from unlogged to logged, where do we remove the init fork?
>
>Couldn't see the keywords fork or init anywhere in the patch, so maybe
>its hidden somewhere.

A new relfilenode is filled with the data - the old one, including the init fork, gets removed by the normal mechanics
ofrewriting rels. 

---
Please excuse brevity and formatting - I am writing this on my mobile phone.


Re: pgsql: Implement ALTER TABLE .. SET LOGGED / UNLOGGED

От
Simon Riggs
Дата:
On 23 August 2014 14:57, Andres Freund <andres@anarazel.de> wrote:
> On August 23, 2014 3:49:32 PM CEST, Simon Riggs <simon@2ndQuadrant.com> wrote:
>>On 22 August 2014 19:30, Alvaro Herrera <alvherre@alvh.no-ip.org>
>>wrote:
>>
>>> Implement ALTER TABLE .. SET LOGGED / UNLOGGED
>>>

>>When moving from unlogged to logged, where do we remove the init fork?
>>
>>Couldn't see the keywords fork or init anywhere in the patch, so maybe
>>its hidden somewhere.
>
> A new relfilenode is filled with the data - the old one, including the init fork, gets removed by the normal
mechanicsof rewriting rels. 

Why do we do that? Table rewrite takes hours.

If that is a requirement, I don't see it documented. If its a choice,
its a bad one.

--
 Simon Riggs                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


Re: pgsql: Implement ALTER TABLE .. SET LOGGED / UNLOGGED

От
Andres Freund
Дата:
On 2014-08-23 17:28:38 +0100, Simon Riggs wrote:
> On 23 August 2014 14:57, Andres Freund <andres@anarazel.de> wrote:
> > On August 23, 2014 3:49:32 PM CEST, Simon Riggs <simon@2ndQuadrant.com> wrote:
> >>On 22 August 2014 19:30, Alvaro Herrera <alvherre@alvh.no-ip.org>
> >>wrote:
> >>
> >>> Implement ALTER TABLE .. SET LOGGED / UNLOGGED
> >>>
>
> >>When moving from unlogged to logged, where do we remove the init fork?
> >>
> >>Couldn't see the keywords fork or init anywhere in the patch, so maybe
> >>its hidden somewhere.
> >
> > A new relfilenode is filled with the data - the old one, including the init fork, gets removed by the normal
mechanicsof rewriting rels. 
>
> Why do we do that? Table rewrite takes hours.

There was a long thread about it on -hackers. Doing it without a rewrite
and without loosing transactional semantics is really rather hard. And
having the capability of doing it with a rewrite is better than not
having it at all.

Greetings,

Andres Freund

--
 Andres Freund                       http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


Re: pgsql: Implement ALTER TABLE .. SET LOGGED / UNLOGGED

От
Andrew Dunstan
Дата:
On 08/23/2014 12:47 PM, Andres Freund wrote:
> On 2014-08-23 17:28:38 +0100, Simon Riggs wrote:
>> On 23 August 2014 14:57, Andres Freund <andres@anarazel.de> wrote:
>>> On August 23, 2014 3:49:32 PM CEST, Simon Riggs <simon@2ndQuadrant.com> wrote:
>>>> On 22 August 2014 19:30, Alvaro Herrera <alvherre@alvh.no-ip.org>
>>>> wrote:
>>>>
>>>>> Implement ALTER TABLE .. SET LOGGED / UNLOGGED
>>>>>
>>>> When moving from unlogged to logged, where do we remove the init fork?
>>>>
>>>> Couldn't see the keywords fork or init anywhere in the patch, so maybe
>>>> its hidden somewhere.
>>> A new relfilenode is filled with the data - the old one, including the init fork, gets removed by the normal
mechanicsof rewriting rels. 
>> Why do we do that? Table rewrite takes hours.
> There was a long thread about it on -hackers. Doing it without a rewrite
> and without loosing transactional semantics is really rather hard. And
> having the capability of doing it with a rewrite is better than not
> having it at all.
>
>



I think this needs to be documented very clearly and explicitly. My
question about the mechanism was similar to Simon's, and I looked in
vain for any clue about it in the committed docs.

cheers

andrew