Postgres Bug (ALTER TABLE problem) - Mailing list pgsql-general
| From | Boulat Khakimov | 
|---|---|
| Subject | Postgres Bug (ALTER TABLE problem) | 
| Date | |
| Msg-id | 3AE85B61.2C29FC5C@inet-interactif.com Whole thread Raw | 
| Responses | Re: Postgres Bug (ALTER TABLE problem) | 
| List | pgsql-general | 
Hi,
I've discovered a bug in Postgres. When you rename
a table, the corresponding triggers for that table
are not updated.
For example:
CREATE TABLE tblParent (
  ID SERIAL NOT NULL,
  Name text,
  PRIMARY KEY (ID)
);
CREATE TABLE tblChild (
  ID int4 NOT NULL,
  email text,
  FOREIGN KEY (ID) REFERENCES tblParent ON DELETE NO ACTION ON UPDATE
CASCADE
);
-----------------------------------------------------------------------------
-- Create temporary table to transfer  data from old table structure
-- into new one.
-- ALTER TABLE tblChild ADD COLUM is not used because it doesnt allow
things
-- like  check (fieldname in...) when new columns are added
--
CREATE TABLE tblChildTemp (
  ID int4 NOT NULL,
  email text,
  Billed char check (Billed in ('Y','N')) DEFAULT 'N' NOT NULL,
  FOREIGN KEY (ID) REFERENCES tblParent ON DELETE NO ACTION ON UPDATE
CASCADE
);
INSERT INTO tblChildTemp(ID,email)
SELECT ID,email FROM tblChild;
DROP table tblChild;
ALTER TABLE tblChildTemp RENAME TO tblChild;
---------------------------------------------------------------------------
-- Here is where the problem starts
UPDATE tblParent SET name='Mary';
ERROR:  RI constraint <unnamed> cannot find table tblchildtemp
If I do "SELECT * FROM pg_trigger";
 tgrelid |           tgname            | tgfoid | tgtype | tgenabled |
tgisconstraint | tgconstrname | tgconstrrelid | tgdeferrable |
tginitdeferred | tgnargs | tgattr |
tgargs
---------+-----------------------------+--------+--------+-----------+----------------+--------------+---------------+--------------+----------------+---------+--------+-----------------------------------------------------------------------
    1260 | pg_sync_pg_pwd              |     12 |     29 | t         |
f              |              |             0 | f
        | f              |       0 |        |
  349149 | RI_ConstraintTrigger_349162 |   1644 |     21 | t         |
t              | <unnamed>    |        349105 | f
        | f              |       6 |        |
<unnamed>\000tblchildtemp\000tblparent\000UNSPECIFIED\000id\000id\000
  349105 | RI_ConstraintTrigger_349164 |   1654 |      9 | t         |
t              | <unnamed>    |        349149 | f
        | f              |       6 |        |
<unnamed>\000tblchildtemp\000tblparent\000UNSPECIFIED\000id\000id\000
  349105 | RI_ConstraintTrigger_349166 |   1647 |     17 | t         |
t              | <unnamed>    |        349149 | f
        | f              |       6 |        |
<unnamed>\000tblchildtemp\000tblparent\000UNSPECIFIED\000id\000id\000
(4 rows)
I can see that the triggers were not updated, they are still using
tblchildtemp,
altho it got renamed.
Does anyone know a way to fix that problem?
Any Feedback would be appreciated...
Regards,
Boulat Khakimov
--
What goes around, comes around
		
	pgsql-general by date: