Adding another primary key to a populated table

Started by Daniel Kunkelover 20 years ago13 messagesgeneral
Jump to latest
#1Daniel Kunkel
DanielKunkel@BioWaves.com

Hi

I'm trying to add another primary key to a table populated with data and
a number of foreign key constraints.

The new column is populated with non-null data (a requirement as I
understand it to become a valid primary key)

I tried:

ALTER TABLE product_price
ADD CONSTRAINT product_price_pkey6 PRIMARY KEY
(product_id,product_price_type_id,currency_uom_id,product_store_group_id,from_date,product_price_purpose_id);

without having any luck.

Any suggestions?

Would it work to dump the database, edit the sql, and re-import?

Thanks in advance.

--
Daniel

*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-
Have a GREAT Day!

Daniel Kunkel DanielKunkel@BioWaves.com
BioWaves, LLC http://www.BioWaves.com
14150 NE 20th St. Suite F1
Bellevue, WA 98007
800-734-3588 425-895-0050
http://www.WizCity.com http://www.Illusion-Optical.com
*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-

#2Jim Nasby
Jim.Nasby@BlueTreble.com
In reply to: Daniel Kunkel (#1)
Re: Adding another primary key to a populated table

On Thu, Jan 05, 2006 at 08:08:39PM -0800, Daniel Kunkel wrote:

Hi

I'm trying to add another primary key to a table populated with data and
a number of foreign key constraints.

The new column is populated with non-null data (a requirement as I
understand it to become a valid primary key)

I tried:

ALTER TABLE product_price
ADD CONSTRAINT product_price_pkey6 PRIMARY KEY
(product_id,product_price_type_id,currency_uom_id,product_store_group_id,from_date,product_price_purpose_id);

without having any luck.

What's the exact error you got?
--
Jim C. Nasby, Sr. Engineering Consultant jnasby@pervasive.com
Pervasive Software http://pervasive.com work: 512-231-6117
vcard: http://jim.nasby.net/pervasive.vcf cell: 512-569-9461

#3Andrew - Supernews
andrew+nonews@supernews.com
In reply to: Daniel Kunkel (#1)
Re: Adding another primary key to a populated table

On 2006-01-06, Daniel Kunkel <DanielKunkel@BioWaves.com> wrote:

Hi

I'm trying to add another primary key to a table populated with data and
a number of foreign key constraints.

You can only have one primary key on a table.

You can add additional unique constraints to get the same effect. (A
primary key constraint is just a unique constraint that is also not null,
and is the default target for REFERENCES constraints referring to the table -
this last factor is why there can be only one...)

--
Andrew, Supernews
http://www.supernews.com - individual and corporate NNTP services

#4Daniel Kunkel
DanielKunkel@BioWaves.com
In reply to: Andrew - Supernews (#3)
Re: Adding another primary key to a populated table

Hi

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of modify the
existing primary key.

So...

As I understand it, a table does not always have to have a primary key
defined.

Would it work to first delete/drop the primary key, then recreate the
primary key on all 6 columns.

ALTER TABLE product_price DROP CONSTRAINT product_price_pkey;

I tried this, but it doesn't seem to work... If I look at the table
from pgAdmin, it is still there, reindexable, I can't add a new primary
key, etc. But if I try to run the above command twice, it says it's
already been removed.

--

Just for the record... the error message I got was:

ERROR: ALTER TABLE / PRIMARY KEY multiple primary keys for table
'product_price' are not allowed

Show quoted text

On Fri, 2006-01-06 at 05:19 +0000, Andrew - Supernews wrote:

On 2006-01-06, Daniel Kunkel <DanielKunkel@BioWaves.com> wrote:

Hi

I'm trying to add another primary key to a table populated with data and
a number of foreign key constraints.

You can only have one primary key on a table.

You can add additional unique constraints to get the same effect. (A
primary key constraint is just a unique constraint that is also not null,
and is the default target for REFERENCES constraints referring to the table -
this last factor is why there can be only one...)

#5Aaron Koning
aaronkoning@gmail.com
In reply to: Daniel Kunkel (#4)
Re: Adding another primary key to a populated table

Are you trying to create a primary key composed of 6 fields? What is the
result you want to achieve with the constraint? If you just want UNIQUE, NOT
NULL values in a field, you can achieve that without creating a primary key.

Aaron

Show quoted text

On 1/5/06, Daniel Kunkel <DanielKunkel@biowaves.com> wrote:

Hi

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of modify the
existing primary key.

So...

As I understand it, a table does not always have to have a primary key
defined.

Would it work to first delete/drop the primary key, then recreate the
primary key on all 6 columns.

ALTER TABLE product_price DROP CONSTRAINT product_price_pkey;

I tried this, but it doesn't seem to work... If I look at the table
from pgAdmin, it is still there, reindexable, I can't add a new primary
key, etc. But if I try to run the above command twice, it says it's
already been removed.

--

Just for the record... the error message I got was:

ERROR: ALTER TABLE / PRIMARY KEY multiple primary keys for table
'product_price' are not allowed

On Fri, 2006-01-06 at 05:19 +0000, Andrew - Supernews wrote:

On 2006-01-06, Daniel Kunkel <DanielKunkel@BioWaves.com> wrote:

Hi

I'm trying to add another primary key to a table populated with data

and

a number of foreign key constraints.

You can only have one primary key on a table.

You can add additional unique constraints to get the same effect. (A
primary key constraint is just a unique constraint that is also not

null,

and is the default target for REFERENCES constraints referring to the

table -

this last factor is why there can be only one...)

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

#6Daniel Kunkel
DanielKunkel@BioWaves.com
In reply to: Aaron Koning (#5)
Re: Adding another primary key to a populated table

Why do I want to include 6 fields in the primary key?

Good question... I don't know. It's a requirement of OFBiz, a really
awesome ERP/CRM/Accounting/ECommerce system.

I'm upgrading the software which requires it, and need to upgrade the
database to match.

Once I find out, I'll publish the solution in the OFBiz forums and Wiki
so others won't come knocking.

Thanks

Daniel

On Thu, 2006-01-05 at 22:44 -0800, Aaron Koning wrote:

Are you trying to create a primary key composed of 6 fields? What is
the result you want to achieve with the constraint? If you just want
UNIQUE, NOT NULL values in a field, you can achieve that without
creating a primary key.

Aaron

On 1/5/06, Daniel Kunkel <DanielKunkel@biowaves.com> wrote:
Hi

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of
modify the
existing primary key.

So...

As I understand it, a table does not always have to have a
primary key
defined.

Would it work to first delete/drop the primary key, then
recreate the
primary key on all 6 columns.

ALTER TABLE product_price DROP CONSTRAINT product_price_pkey;

I tried this, but it doesn't seem to work... If I look at the
table
from pgAdmin, it is still there, reindexable, I can't add a
new primary
key, etc. But if I try to run the above command twice, it
says it's
already been removed.

--

Just for the record... the error message I got was:

ERROR: ALTER TABLE / PRIMARY KEY multiple primary keys for
table
'product_price' are not allowed

On Fri, 2006-01-06 at 05:19 +0000, Andrew - Supernews wrote:

On 2006-01-06, Daniel Kunkel < DanielKunkel@BioWaves.com>

wrote:

Hi

I'm trying to add another primary key to a table populated

with data and

a number of foreign key constraints.

You can only have one primary key on a table.

You can add additional unique constraints to get the same

effect. (A

primary key constraint is just a unique constraint that is

also not null,

and is the default target for REFERENCES constraints

referring to the table -

this last factor is why there can be only one...)

---------------------------(end of
broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your
desire to
choose an index scan if your joining column's datatypes
do not
match

--
Daniel

*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-
Have a GREAT Day!

Daniel Kunkel DanielKunkel@BioWaves.com
BioWaves, LLC http://www.BioWaves.com
14150 NE 20th St. Suite F1
Bellevue, WA 98007
800-734-3588 425-895-0050
http://www.WizCity.com http://www.Illusion-Optical.com
*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-

#7Guy Fraser
guy@incentre.net
In reply to: Daniel Kunkel (#6)
Re: Adding another primary key to a populated table

Have you considered dumping the data, dropping the table and
building the replacement table with the correct properties
then repopulating the table with the dumped data?

Show quoted text

On Thu, 2006-05-01 at 23:02 -0800, Daniel Kunkel wrote:

Why do I want to include 6 fields in the primary key?

Good question... I don't know. It's a requirement of OFBiz, a really
awesome ERP/CRM/Accounting/ECommerce system.

I'm upgrading the software which requires it, and need to upgrade the
database to match.

Once I find out, I'll publish the solution in the OFBiz forums and Wiki
so others won't come knocking.

Thanks

Daniel

On Thu, 2006-01-05 at 22:44 -0800, Aaron Koning wrote:

Are you trying to create a primary key composed of 6 fields? What is
the result you want to achieve with the constraint? If you just want
UNIQUE, NOT NULL values in a field, you can achieve that without
creating a primary key.

Aaron

On 1/5/06, Daniel Kunkel <DanielKunkel@biowaves.com> wrote:
Hi

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of
modify the
existing primary key.

So...

As I understand it, a table does not always have to have a
primary key
defined.

Would it work to first delete/drop the primary key, then
recreate the
primary key on all 6 columns.

ALTER TABLE product_price DROP CONSTRAINT product_price_pkey;

I tried this, but it doesn't seem to work... If I look at the
table
from pgAdmin, it is still there, reindexable, I can't add a
new primary
key, etc. But if I try to run the above command twice, it
says it's
already been removed.

--

Just for the record... the error message I got was:

ERROR: ALTER TABLE / PRIMARY KEY multiple primary keys for
table
'product_price' are not allowed

On Fri, 2006-01-06 at 05:19 +0000, Andrew - Supernews wrote:

On 2006-01-06, Daniel Kunkel < DanielKunkel@BioWaves.com>

wrote:

Hi

I'm trying to add another primary key to a table populated

with data and

a number of foreign key constraints.

You can only have one primary key on a table.

You can add additional unique constraints to get the same

effect. (A

primary key constraint is just a unique constraint that is

also not null,

and is the default target for REFERENCES constraints

referring to the table -

this last factor is why there can be only one...)

---------------------------(end of
broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your
desire to
choose an index scan if your joining column's datatypes
do not
match

#8Daniel Kunkel
DanielKunkel@BioWaves.com
In reply to: Guy Fraser (#7)
Re: Adding another primary key to a populated table

Hi

Yes... It's the only solution I know will work, but this is a core
table on a live system, and I haven't done this before.

Does anyone have a proven script they could share?

On Fri, 2006-01-06 at 08:22 -0700, Guy Fraser wrote:

Have you considered dumping the data, dropping the table and
building the replacement table with the correct properties
then repopulating the table with the dumped data?

On Thu, 2006-05-01 at 23:02 -0800, Daniel Kunkel wrote:

Why do I want to include 6 fields in the primary key?

Good question... I don't know. It's a requirement of OFBiz, a really
awesome ERP/CRM/Accounting/ECommerce system.

I'm upgrading the software which requires it, and need to upgrade the
database to match.

Once I find out, I'll publish the solution in the OFBiz forums and Wiki
so others won't come knocking.

Thanks

Daniel

On Thu, 2006-01-05 at 22:44 -0800, Aaron Koning wrote:

Are you trying to create a primary key composed of 6 fields? What is
the result you want to achieve with the constraint? If you just want
UNIQUE, NOT NULL values in a field, you can achieve that without
creating a primary key.

Aaron

On 1/5/06, Daniel Kunkel <DanielKunkel@biowaves.com> wrote:
Hi

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of
modify the
existing primary key.

So...

As I understand it, a table does not always have to have a
primary key
defined.

Would it work to first delete/drop the primary key, then
recreate the
primary key on all 6 columns.

ALTER TABLE product_price DROP CONSTRAINT product_price_pkey;

I tried this, but it doesn't seem to work... If I look at the
table
from pgAdmin, it is still there, reindexable, I can't add a
new primary
key, etc. But if I try to run the above command twice, it
says it's
already been removed.

--

Just for the record... the error message I got was:

ERROR: ALTER TABLE / PRIMARY KEY multiple primary keys for
table
'product_price' are not allowed

On Fri, 2006-01-06 at 05:19 +0000, Andrew - Supernews wrote:

On 2006-01-06, Daniel Kunkel < DanielKunkel@BioWaves.com>

wrote:

Hi

I'm trying to add another primary key to a table populated

with data and

a number of foreign key constraints.

You can only have one primary key on a table.

You can add additional unique constraints to get the same

effect. (A

primary key constraint is just a unique constraint that is

also not null,

and is the default target for REFERENCES constraints

referring to the table -

this last factor is why there can be only one...)

---------------------------(end of
broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your
desire to
choose an index scan if your joining column's datatypes
do not
match

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org

--
Daniel

*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-
Have a GREAT Day!

Daniel Kunkel DanielKunkel@BioWaves.com
BioWaves, LLC http://www.BioWaves.com
14150 NE 20th St. Suite F1
Bellevue, WA 98007
800-734-3588 425-895-0050
http://www.WizCity.com http://www.Illusion-Optical.com
*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-

#9Stephan Szabo
sszabo@megazone23.bigpanda.com
In reply to: Daniel Kunkel (#4)
Re: Adding another primary key to a populated table

On Thu, 5 Jan 2006, Daniel Kunkel wrote:

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of modify the
existing primary key.

So...

As I understand it, a table does not always have to have a primary key
defined.

Would it work to first delete/drop the primary key, then recreate the
primary key on all 6 columns.

ALTER TABLE product_price DROP CONSTRAINT product_price_pkey;

I tried this, but it doesn't seem to work... If I look at the table
from pgAdmin, it is still there, reindexable, I can't add a new primary
key, etc. But if I try to run the above command twice, it says it's
already been removed.

What version are you using? The above sort of thing seems to work for me
on my 8.2 devel machine (in a small test, including recreating the key)
and I had thought it should on 8.1 as well.

#10Daniel Kunkel
DanielKunkel@BioWaves.com
In reply to: Stephan Szabo (#9)
Re: Adding another primary key to a populated table

Hi

Thank you for taking time to give that a try.

I'm currently running 7.3.10.

On Fri, 2006-01-06 at 07:50 -0800, Stephan Szabo wrote:

On Thu, 5 Jan 2006, Daniel Kunkel wrote:

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of modify the
existing primary key.

So...

As I understand it, a table does not always have to have a primary key
defined.

Would it work to first delete/drop the primary key, then recreate the
primary key on all 6 columns.

ALTER TABLE product_price DROP CONSTRAINT product_price_pkey;

I tried this, but it doesn't seem to work... If I look at the table
from pgAdmin, it is still there, reindexable, I can't add a new primary
key, etc. But if I try to run the above command twice, it says it's
already been removed.

What version are you using? The above sort of thing seems to work for me
on my 8.2 devel machine (in a small test, including recreating the key)
and I had thought it should on 8.1 as well.

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

--
Daniel

*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-
Have a GREAT Day!

Daniel Kunkel DanielKunkel@BioWaves.com
BioWaves, LLC http://www.BioWaves.com
14150 NE 20th St. Suite F1
Bellevue, WA 98007
800-734-3588 425-895-0050
http://www.WizCity.com http://www.Illusion-Optical.com
*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-.,,.-*"*-

#11Jaime Casanova
jcasanov@systemguards.com.ec
In reply to: Daniel Kunkel (#4)
Re: Adding another primary key to a populated table

On 1/6/06, Daniel Kunkel <DanielKunkel@biowaves.com> wrote:

Hi

It makes sense that I can't have more than 1 primary key.

Postgres was trying to create another primary key instead of modify the
existing primary key.

So...

As I understand it, a table does not always have to have a primary key
defined.

Would it work to first delete/drop the primary key, then recreate the
primary key on all 6 columns.

yes, but you have to drop all the dependant FOREIGN KEY constraints too

--
regards,
Jaime Casanova
(DBA: DataBase Aniquilator ;)

#12Stephan Szabo
sszabo@megazone23.bigpanda.com
In reply to: Daniel Kunkel (#10)
Re: Adding another primary key to a populated table

On Fri, 6 Jan 2006, Daniel Kunkel wrote:

Thank you for taking time to give that a try.

I'm currently running 7.3.10.

In that case, if you do a drop constraint and then try manually dropping
the index (probably drop index product_price_pkey), does it work?

#13Jim Nasby
Jim.Nasby@BlueTreble.com
In reply to: Stephan Szabo (#12)
Re: Adding another primary key to a populated table

Adding -general back in...

As someone else already mentioned, you can't have multiple primary keys on one table.

From: Daniel Kunkel [mailto:DanielKunkel@BioWaves.com]
ERROR: ALTER TABLE / PRIMARY KEY multiple primary keys for table
'product_price' are not allowed

On Thu, 2006-01-05 at 22:51 -0600, Jim C. Nasby wrote:

On Thu, Jan 05, 2006 at 08:08:39PM -0800, Daniel Kunkel wrote:

Hi

I'm trying to add another primary key to a table

populated with data and

a number of foreign key constraints.

The new column is populated with non-null data (a requirement as I
understand it to become a valid primary key)

I tried:

ALTER TABLE product_price
ADD CONSTRAINT product_price_pkey6 PRIMARY KEY

(product_id,product_price_type_id,currency_uom_id,product_stor
e_group_id,from_date,product_price_purpose_id);

without having any luck.

What's the exact error you got?

--
Jim C. Nasby, Sr. Engineering Consultant jnasby@pervasive.com
Pervasive Software http://pervasive.com work: 512-231-6117
vcard: http://jim.nasby.net/pervasive.vcf cell: 512-569-9461