"alter table rename" does not update constraints

Started by Ulf Mehligover 25 years ago2 messagesgeneral
Jump to latest
#1Ulf Mehlig
umehlig@uni-bremen.de

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
----------------------------------------------------------------------

#2'JanWieck@t-online.de'
JanWieck@t-online.de
In reply to: Ulf Mehlig (#1)
Re: "alter table rename" does not update constraints

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 #