Thread: retrieving a serial number

retrieving a serial number

From
"Lea, Michael"
Date:
I have one table (call it "master") that, among other things, contains a
serial number. I have a number of other tables (call them "slaves") that,
among other things, contain a foreign key referring to the serial number in
the first table. I will be inserting one row into the master table, and one
row into zero or more slave tables in each transaction.

What I want to do is use a sequence in the master table to let PostgreSQL
automatically generate a unique serial number for me, but I need to know the
serial number in order to insert the corresponding rows into the slave
table(s). Is there any way of retrieving the serial number that will be used
before the transaction has been committed? Or will I have to generate my own
serial numbers?

Michael Lea
Information Security
Manitoba Public Insurance
Phone: (204) 985-8224


Re: retrieving a serial number

From
philip@adhesivemedia.com (Philip Hallstrom)
Date:
There's probably a way to get that serial number.
I think I remember reading that when you specify it as SERIAL,
postgresql actually creates a separate sequence.  If that's the case
then you could do "SELECT currval('mysequence')" -- although I'm not
sure what "mysequence" should be set to.
The other way to do it would be to remove the SERIAL attribute from the
table, making it an INT4 (or whatever) and then create a separate
sequence...so...
SELECT nextval('mysequence');
insert into master... (using the value returned from above)
insert into slave... (using the value returned from above)
insert into slave... (using the value returned from above)
insert into slave... (using the value returned from above)
insert into slave... (using the value returned from above)
would work just fine.
In article <am.pgsql.sql.962213794.3300@illiad.adhesivemedia.com>,
Lea, Michael <MLea@mpi.mb.ca> wrote:
>I have one table (call it "master") that, among other things, contains a
>serial number. I have a number of other tables (call them "slaves") that,
>among other things, contain a foreign key referring to the serial number in
>the first table. I will be inserting one row into the master table, and one
>row into zero or more slave tables in each transaction.
>What I want to do is use a sequence in the master table to let PostgreSQL
>automatically generate a unique serial number for me, but I need to know the
>serial number in order to insert the corresponding rows into the slave
>table(s). Is there any way of retrieving the serial number that will be used
>before the transaction has been committed? Or will I have to generate my own
>serial numbers?
>Michael Lea
>Information Security
>Manitoba Public Insurance
>Phone: (204) 985-8224



Re: retrieving a serial number

From
"Robert B. Easter"
Date:
You can do something like this:
$var = SELECT nextval('seq_name');
INSERT INTO master (id, ...) VALUES ($var, ...);
INSERT INTO slave1 (id, ...) VALUES ($var, ...);
...

You can do a \d master, in psql to find out the name of the sequence. For
the SERIAL type, nextval('seq_name') is just its default anyway.


On Wed, 28 Jun 2000, Lea, Michael wrote:
> I have one table (call it "master") that, among other things, contains a
> serial number. I have a number of other tables (call them "slaves") that,
> among other things, contain a foreign key referring to the serial number in
> the first table. I will be inserting one row into the master table, and one
> row into zero or more slave tables in each transaction.
> 
> What I want to do is use a sequence in the master table to let PostgreSQL
> automatically generate a unique serial number for me, but I need to know the
> serial number in order to insert the corresponding rows into the slave
> table(s). Is there any way of retrieving the serial number that will be used
> before the transaction has been committed? Or will I have to generate my own
> serial numbers?
> 
> Michael Lea
> Information Security
> Manitoba Public Insurance
> Phone: (204) 985-8224
-- 
Robert B. Easter


Re: retrieving a serial number

From
Joachim Trinkwitz
Date:
"Robert B. Easter" <reaster@comptechnews.com> writes:

> You can do something like this:
> $var = SELECT nextval('seq_name');
> INSERT INTO master (id, ...) VALUES ($var, ...);
> INSERT INTO slave1 (id, ...) VALUES ($var, ...);

Great feaure. What to do when importing some previous data from ascii
files -- can you automatically give a serial number in this way to?

Thanks in advance,
joachim