Thread

  1. Re: [BUGS] Running queries on inherited tables

    Tom Lane <tgl@sss.pgh.pa.us> — 1999-09-12T17:07:37Z

    Michael Richards <miker@scifair.acadiau.ca> writes:
    > I was fooling with inheritance today. From the page at:
    > http://www.postgresql.org/docs/user/inherit.htm
    > Here the * after cities indicates that the query should be run over cities
    > and all classes below cities in the inheritance hierarchy. Many of the
    > commands that we have
    > already discussed -- SELECT, UPDATE and DELETE -- support this * notation,
    > as do others, like ALTER TABLE. 
    
    The doc is wrong here --- UPDATE and DELETE don't support *.  They should.
    
    > More playing followed... If I alter table on cities and add a column, is
    > it not expected that the additional col should appear in the tables which
    > inherit from cities?
    
    You have to say "alter table cities*", I believe, otherwise only cities
    is changed.  Which is pretty broken --- if inheritance means anything,
    then it ought to mean that the alteration is *inherently* applied to all
    the child tables too, and you shouldn't have the option.  In general,
    however, beware that alteration of inheritance structures is pretty
    thoroughly broken --- see various complaints in the pghackers archives
    (mostly from Chris Bitmead, I think).  ALTER TABLE really needs a
    reimplementation from the ground up, but I dunno when anyone will get
    around to it.
    
    			regards, tom lane
    
    
  2. Re: [BUGS] Running queries on inherited tables

    Michael Richards <miker@scifair.acadiau.ca> — 1999-09-12T18:41:48Z

    On Sun, 12 Sep 1999, Tom Lane wrote:
    
    > You have to say "alter table cities*", I believe, otherwise only cities
    > is changed.  Which is pretty broken --- if inheritance means anything,
    > then it ought to mean that the alteration is *inherently* applied to all
    > the child tables too, and you shouldn't have the option.  In general,
    Would this be a simple change in parsing the statement to see if it has
    any children and translate the statement accordingly?
    
    > (mostly from Chris Bitmead, I think).  ALTER TABLE really needs a
    > reimplementation from the ground up, but I dunno when anyone will get
    Considering how often Alter table is used, would it be reasonable to rip
    out all the alter table code and just have it do a select into;drop;rename
    that would be nice in that dropping/adding columns would be easy,
    inheritance would (should) be preserved and it's simple. 
    
    Of course I wouldn't want to do this on a 5Gb table...
    
    
    -Michael
    
    
    
  3. Re: [BUGS] Running queries on inherited tables

    Tom Lane <tgl@sss.pgh.pa.us> — 1999-09-13T00:00:10Z

    Michael Richards <miker@scifair.acadiau.ca> writes:
    > On Sun, 12 Sep 1999, Tom Lane wrote:
    >> You have to say "alter table cities*", I believe, otherwise only cities
    >> is changed.  Which is pretty broken --- if inheritance means anything,
    >> then it ought to mean that the alteration is *inherently* applied to all
    >> the child tables too, and you shouldn't have the option.
    
    > Would this be a simple change in parsing the statement to see if it has
    > any children and translate the statement accordingly?
    
    Yes, I think it would be a reasonably localized change, assuming that
    no one objected.  (I suppose somewhere out there is someone who thinks
    the current behavior is a good idea ;-).)
    
    >> (mostly from Chris Bitmead, I think).  ALTER TABLE really needs a
    >> reimplementation from the ground up, but I dunno when anyone will get
    
    > Considering how often Alter table is used, would it be reasonable to rip
    > out all the alter table code and just have it do a select into;drop;rename
    
    That would be a good route to a reimplementation, actually.  Want to
    have a go at it?
    
    > Of course I wouldn't want to do this on a 5Gb table...
    
    There's probably not much choice.  The current implementation avoids
    touching the data at all, but that is precisely the source of most of
    its bugs and limitations.  I think most of the cases that we currently
    can't handle would involve changing all the tuples, and at that point
    select-into-a-new-table is probably really the preferred technique
    compared to trying to do it in-place.  (In-place, you'd have to do a
    VACUUM to get back the extra 5Gb after the transformation is done,
    since you surely don't want to overwrite the old tuples before commit.)
    
    			regards, tom lane
    
    
  4. Re: [BUGS] Running queries on inherited tables

    Michael Richards <miker@scifair.acadiau.ca> — 1999-09-13T14:49:46Z

    On Sun, 12 Sep 1999, Tom Lane wrote:
    
    > > Considering how often Alter table is used, would it be reasonable to rip
    > > out all the alter table code and just have it do a select into;drop;rename
    > 
    > That would be a good route to a reimplementation, actually.  Want to
    > have a go at it?
    Sure.  I'll wade into the code and see if I can swim. I think I'll first
    try to implement ALTER TABLE class_name DELETE COLUMN col_name
    
    Which version do you suggest I work with to come up with patches?
    
    > > Of course I wouldn't want to do this on a 5Gb table...
    > 
    > There's probably not much choice.  The current implementation avoids
    > touching the data at all, but that is precisely the source of most of
    > its bugs and limitations.  I think most of the cases that we currently
    D'oh. Now that I think about it you'd need 2n the amount of space
    anyway... That brings up an intersting point... Does the database do a
    rollback if it runs out of space on the device? Considering that a vacuum
    is the only way to reclaim space that should mean that all queries
    following should fail unless they are selects.
    
    -Michael
    
    
    
  5. Re: [SQL] Re: [BUGS] Running queries on inherited tables

    Herouth Maoz <herouth@oumail.openu.ac.il> — 1999-09-21T14:57:56Z

    At 02:00 +0200 on 13/09/1999, Tom Lane wrote:
    
    
    > > Considering how often Alter table is used, would it be reasonable to rip
    > > out all the alter table code and just have it do a select into;drop;rename
    >
    > That would be a good route to a reimplementation, actually.  Want to
    > have a go at it?
    
    OIDs of all rows will be changed, won't they? Some people rely on OIDs in
    their applications.
    
    Herouth
    
    --
    Herouth Maoz, Internet developer.
    Open University of Israel - Telem project
    http://telem.openu.ac.il/~herutma