Thread: "alter table rename" does not update constraints

"alter table rename" does not update constraints

From
Ulf Mehlig
Date:
Hi there,

I successfully renamed one of the columns of the primary key of one of
my tables (it is used in one of the foreign keys, too -- I think, this
is the problem). Unfortunately, the constraint (rule system?) wasn't
updated by "alter table" -- have a look:

----------------------------------------------------------------------
  db=# create table blatt_schaeden (
               nummer smallint not null,
               datum date not null,
               typ smallint not null,
               klasse smallint,
               schaden smallint,
               primary key (nummer,datum,typ),
               foreign key (nummer) references blatt,
               foreign key (typ) references blatt_schadenstyp
               );
  CREATE
  db=# alter table blatt_schaeden rename column nummer to blatt_nummer;
  ALTER
  db=# update blatt_schaeden set klasse = 0 where schaden=0;
  ERROR:  constraint <unnamed>: table blatt_schaeden does not have an attribute nummer
----------------------------------------------------------------------

Do you consider this as a bug? There are similar items in the TODO
file, related to "alter table add" ...

Thanks for your attention,
Ulf

postgreSQL 7.0.2, i386 Linux 2.2.15/Redhat-6.something

--
======================================================================
Ulf Mehlig    <ulf.mehlig@zmt.uni-bremen.de>
              Center for Tropical Marine Ecology/ZMT, Bremen, Germany
----------------------------------------------------------------------

Re: "alter table rename" does not update constraints

From
JanWieck@t-online.de (Jan Wieck)
Date:
Ulf Mehlig wrote:
> Hi there,
>
> I successfully renamed one of the columns of the primary key of one of
> my tables (it is used in one of the foreign keys, too -- I think, this
> is the problem). Unfortunately, the constraint (rule system?) wasn't
> updated by "alter table" -- have a look:
>
> ----------------------------------------------------------------------
>   db=# create table blatt_schaeden (
>                nummer smallint not null,
>                datum date not null,
>                typ smallint not null,
>                klasse smallint,
>                schaden smallint,
>                primary key (nummer,datum,typ),
>                foreign key (nummer) references blatt,
>                foreign key (typ) references blatt_schadenstyp
>                );
>   CREATE
>   db=# alter table blatt_schaeden rename column nummer to blatt_nummer;
>   ALTER
>   db=# update blatt_schaeden set klasse = 0 where schaden=0;
>   ERROR:  constraint <unnamed>: table blatt_schaeden does not have an attribute nummer
> ----------------------------------------------------------------------

Hallo Ulf,

    wie geht's?

    Still  mucking  around  with  your  leaf's?  What's  the  boy
    measuring snails doing?  Still  aggregating  them  or  is  he
    totally slimed? Where the views we developed of help for him?

    Hope you don't mind, but these where the funniest samples for
    using aggregates and views I ever heard from. I'm still using
    them when it boils down to tell fun stories about work.

    :-)

> Do you consider this as a bug? There are similar items in the TODO
> file, related to "alter table add" ...

    This is a buggy feature. The refint triggers are defined in a
    way,  that  they  know  the  attribute names to look for from
    their  trigger  arguments.   But  these  trigger  definitions
    aren't updated at RENAME COLUMN time.

    We  need  to  change that to an OID based system, so they are
    out of the way for column name changes. We know  how  to  fix
    it, but time is a finite resource...


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #