Thread: Adding a New Composite Constraint to an Existing Table.
Hi, I am using postgresql 7.1. I was unable to add a new PRIMARY KEY constraint to an existing table. i have table, CREATE TABLE xx ( id int, name text, amount int ); I have say some 10 records in this table, which are unique and not null (primary). Fine! Now, i am willing to have primary key constraint to all the 3 fields. I tried, bhuvan=> ALTER TABLE xx ADD primary key (id, name, amount); ERROR: ALTER TABLE / ADD CONSTRAINT is not implemented for that constraint type. Where i am wrong? How else, can i get that primary key constraint WITHOUT RECREATING that table? Hope to get some lights. Regards, Bhuvaneswar.
Dear Bhuvaneswar, Postgresql 7.2 has implemented this feature. For 7.1, I am afraid that you should recreate the table. M.T. --- Bhuvan A <bhuvansql@yahoo.com> wrote: > > Hi, > > I am using postgresql 7.1. I was unable to add a > new PRIMARY KEY > constraint to an existing table. > > i have table, > CREATE TABLE xx > ( > id int, > name text, > amount int > ); > > I have say some 10 records in this table, which are > unique and not > null (primary). Fine! Now, i am willing to have > primary key constraint > to all the 3 fields. > > I tried, > > bhuvan=> ALTER TABLE xx ADD primary key (id, name, > amount); > ERROR: ALTER TABLE / ADD CONSTRAINT is not > implemented for that > constraint type. > > Where i am wrong? How else, can i get that primary > key constraint > WITHOUT RECREATING that table? > > Hope to get some lights. > > Regards, > Bhuvaneswar. > > > > ---------------------------(end of > broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org __________________________________________________ Do You Yahoo!? Send FREE Valentine eCards with Yahoo! Greetings! http://greetings.yahoo.com
On Sat, 9 Feb 2002, Bhuvan A wrote: > I am using postgresql 7.1. I was unable to add a new PRIMARY KEY > constraint to an existing table. > > i have table, > CREATE TABLE xx > ( > id int, > name text, > amount int > ); > > I have say some 10 records in this table, which are unique and not > null (primary). Fine! Now, i am willing to have primary key constraint > to all the 3 fields. > > I tried, > > bhuvan=> ALTER TABLE xx ADD primary key (id, name, amount); > ERROR: ALTER TABLE / ADD CONSTRAINT is not implemented for that > constraint type. > > Where i am wrong? How else, can i get that primary key constraint > WITHOUT RECREATING that table? On 7.1 you need a little magic depending on how exactly you want to make the primary key. I don't have a 7.1 machine available, but... You should make a unique index xx_pkey on xx(id, name, amount) You may want to update pg_index to set the indisprimary for that index, but I don't think that'll affect the actual running of the constraint. You'll then need to set the three columns NOT NULL by something like: update pg_attribute set attnotnull=true from pg_class where pg_class.oid=attrelid and relname='xx' and attname in ('id', 'name', 'amount');