In response to johnf :
> Hi,
> I'm not to sure this is possible.  
> 
> I need to replace a primary key (pkid) with the value of a different field.
> I have 
> pkid = 200
> attendid = 301
> 
> I need the pkid = 301
> 
> But there may or may not be a pkid that already exist that has the value of 
> 301.  The attendid is unique and the pkid data type is serial (has a 
> sequence).
> 
> Thanks for the help.

You can do that within a transaction and dropping the pk-constraint:

test=*# \d foo
                         Table "public.foo"
 Column |  Type   |                    Modifiers
--------+---------+--------------------------------------------------
 id     | integer | not null default nextval('foo_id_seq'::regclass)
 i      | integer |
Indexes:
    "foo_pkey" PRIMARY KEY, btree (id)
    "foo_i_key" UNIQUE, btree (i)

test=*# select * from foo;
 id | i
----+---
  1 | 2
  2 | 1
  3 | 3
(3 rows)

test=*# alter table foo drop constraint foo_pkey;
ALTER TABLE
test=*# update foo set id=i;
UPDATE 3
test=*# alter table foo add primary key(id);
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index "foo_pkey" 
for table "foo"
ALTER TABLE
test=*# \d foo
                         Table "public.foo"
 Column |  Type   |                    Modifiers
--------+---------+--------------------------------------------------
 id     | integer | not null default nextval('foo_id_seq'::regclass)
 i      | integer |
Indexes:
    "foo_pkey" PRIMARY KEY, btree (id)
    "foo_i_key" UNIQUE, btree (i)

test=*# select * from foo;
 id | i
----+---
  2 | 2
  1 | 1
  3 | 3
(3 rows)


HTH, Andreas
-- 
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID:   0x3FFF606C, privat 0x7F4584DA   http://wwwkeys.de.pgp.net

-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply via email to