(sorry if it's a dup) In 7.4.3, if I rename a column which references another table, constraint trigger fails on update or delete from main table.
There are a couple of similar (and about rename table itself) reports for 7.0, 7.1 (as Tom Lane said, rename table is fixed in 7.2), but I see no more reports since 2001. Here's a simple reproducible example: [EMAIL PROTECTED] CREATE TABLE master (k integer NOT NULL PRIMARY KEY) WITHOUT OIDS; NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "master_pkey" for table "master" CREATE TABLE [EMAIL PROTECTED] CREATE TABLE slave (ref integer REFERENCES master (k)) WITHOUT OIDS; CREATE TABLE [EMAIL PROTECTED] INSERT INTO master VALUES (1); INSERT 0 1 [EMAIL PROTECTED] INSERT INTO master VALUES (2); INSERT 0 1 [EMAIL PROTECTED] DELETE FROM master WHERE k = 1; DELETE 1 [EMAIL PROTECTED] ALTER TABLE slave RENAME ref TO k; ALTER TABLE [EMAIL PROTECTED] UPDATE master SET k = 2 where k = 2; ERROR: table "slave" does not have column "ref" referenced by constraint "$1" [EMAIL PROTECTED] DELETE FROM master WHERE k = 2; ERROR: table "slave" does not have column "ref" referenced by constraint "$1" However triggers themselves look good after rename: [EMAIL PROTECTED] \d slave Table "public.slave" Column | Type | Modifiers --------+---------+----------- k | integer | Foreign-key constraints: "$1" FOREIGN KEY (k) REFERENCES master(k) [EMAIL PROTECTED] SELECT * from pg_trigger WHERE tgrelid = (SELECT oid FROM pg_class WHERE relname = 'slave'); tgrelid | tgname | tgfoid | tgtype | tgenabled | tgisconstraint | tgconstrname | tgconstrrelid | tgdeferrable | tginitdeferred | tgnargs | tgattr | tgargs ---------+----------------------------+--------+--------+-----------+----------------+--------------+---------------+--------------+----------------+---------+--------+---------------------------------------------------- 77304 | RI_ConstraintTrigger_77307 | 1644 | 21 | t | t | $1 | 77300 | f | f | 6 | | $1\000slave\000master\000UNSPECIFIED\000k\000k\000 (1 row) [EMAIL PROTECTED] SELECT * from pg_trigger WHERE tgrelid = (SELECT oid FROM pg_class WHERE relname = 'master'); tgrelid | tgname | tgfoid | tgtype | tgenabled | tgisconstraint | tgconstrname | tgconstrrelid | tgdeferrable | tginitdeferred | tgnargs | tgattr | tgargs ---------+----------------------------+--------+--------+-----------+----------------+--------------+---------------+--------------+----------------+---------+--------+---------------------------------------------------- 77300 | RI_ConstraintTrigger_77309 | 1655 | 17 | t | t | $1 | 77304 | f | f | 6 | | $1\000slave\000master\000UNSPECIFIED\000k\000k\000 77300 | RI_ConstraintTrigger_77308 | 1654 | 9 | t | t | $1 | 77304 | f | f | 6 | | $1\000slave\000master\000UNSPECIFIED\000k\000k\000 (2 rows) The problem goes away after re-creating the foreign key: [EMAIL PROTECTED] ALTER TABLE slave DROP CONSTRAINT "$1"; ALTER TABLE [EMAIL PROTECTED] ALTER TABLE slave ADD CONSTRAINT "$1" FOREIGN KEY (k) REFERENCES master(k); ALTER TABLE [EMAIL PROTECTED] DELETE FROM master WHERE k = 2; DELETE 1 -- Fduch M. Pravking ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster