Re: [SQL] keeping OID's when copying table - Mailing list pgsql-sql

From Bruce Momjian
Subject Re: [SQL] keeping OID's when copying table
Date
Msg-id 199902042151.QAA19358@candle.pha.pa.us
Whole thread Raw
In response to Re: [SQL] keeping OID's when copying table  (Michael Olivier <molivier@yahoo.com>)
List pgsql-sql
> ---Bruce Momjian <maillist@candle.pha.pa.us> wrote:
> >
> > Thank you for pointing out my error.  It should be:
> >
> >         CREATE TABLE new_table (mycol int);
> >         INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM
> old_table;
> >
> > I have updated the FAQ.
>
> Hmm... now I don't get an error, but the oid isn't preserved. This is
> running 6.3.2 on RH Linux:
>
> dmdemo=> CREATE TABLE new_table (mycol int);
> CREATE
> dmdemo=> CREATE TABLE old_table (mycol int);
> CREATE
> dmdemo=> insert into old_table values (33);
> INSERT 837643 1
> dmdemo=> select oid from old_table;
>    oid
> ------
> 837643
> (1 row)
>
> dmdemo=> INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM
> dmdemo-> old_table;
> INSERT 837644 1
> dmdemo=> select oid from new_table;
>    oid
> ------
> 837644
> (1 row)
>
> Further suggestions?

OK, I have a fix for you.

    CREATE TABLE new(old_oid oid, mycol int);
    SELECT INTO new SELECT old_oid, mycol FROM old;
    COPY new TO '/tmp/x';
    DELETE FROM new;
    COPY new WITH OIDS FROM '/tmp/x';

Does this work for your purposes?  I have updated the FAQ.

Should we allow oid's to be transfered via INSERT?  I think we should.

   INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table

--
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-sql by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [SQL] keeping OID's when copying tableu
Next
From: "Jackson, DeJuan"
Date:
Subject: RE: [SQL] problem with join & count