From 36458b93e0961c983f76db415aa0aeef9ebeeffd Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 13 Oct 2001 03:53:45 +0000 Subject: [PATCH] Update FAQ. --- doc/FAQ | 15 ++++++++++----- doc/src/FAQ/FAQ.html | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/doc/FAQ b/doc/FAQ index 6273e48b01c..027d5aae86e 100644 --- a/doc/FAQ +++ b/doc/FAQ @@ -1,7 +1,7 @@ Frequently Asked Questions (FAQ) for PostgreSQL - Last updated: Fri Oct 12 23:37:30 EDT 2001 + Last updated: Fri Oct 12 23:53:35 EDT 2001 Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) @@ -825,9 +825,11 @@ BYTEA bytea variable-length byte array (null-safe) One approach is to to retrieve the next SERIAL value from the sequence object with the nextval() function before inserting and then insert it explicitly. Using the example table in 4.16.1, that might look like - this: - $newSerialID = nextval('person_id_seq'); + this in Perl: + $sql = "SELECT nextval('person_id_seq')"; + $newSerialID = ($conn->selectrow_array($sql))[0]; INSERT INTO person (id, name) VALUES ($newSerialID, 'Blaise Pascal'); + $res = $dbh->do($sql); You would then also have the new value stored in $newSerialID for use in other queries (e.g., as a foreign key to the person table). Note @@ -838,7 +840,9 @@ BYTEA bytea variable-length byte array (null-safe) Alternatively, you could retrieve the assigned SERIAL value with the currval() function after it was inserted by default, e.g., INSERT INTO person (name) VALUES ('Blaise Pascal'); - $newID = currval('person_id_seq'); + $res = $conn->do($sql); + $sql = "SELECT currval('person_id_seq')"; + $newSerialID = ($conn->selectrow_array($sql))[0]; Finally, you could use the OID returned from the INSERT statement to look up the default value, though this is probably the least portable @@ -849,7 +853,8 @@ BYTEA bytea variable-length byte array (null-safe) 4.16.3) Don't currval() and nextval() lead to a race condition with other users? - No. This is handled by the backends. + No. Currval() returns the current value assigned by your backend, not + by all users. 4.17) What is an OID? What is a TID? diff --git a/doc/src/FAQ/FAQ.html b/doc/src/FAQ/FAQ.html index 4329e2b5e10..90e2588b6e9 100644 --- a/doc/src/FAQ/FAQ.html +++ b/doc/src/FAQ/FAQ.html @@ -12,7 +12,7 @@ alink="#0000FF">

Frequently Asked Questions (FAQ) for PostgreSQL

-

Last updated: Fri Oct 12 23:37:30 EDT 2001

+

Last updated: Fri Oct 12 23:53:35 EDT 2001

Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
@@ -1046,10 +1046,12 @@ BYTEA bytea variable-length byte array (null-safe) value from the sequence object with the nextval() function before inserting and then insert it explicitly. Using the example table in 4.16.1, that might look like - this:

+ this in Perl:

-    $newSerialID = nextval('person_id_seq');
+    $sql = "SELECT nextval('person_id_seq')";
+    $newSerialID = ($conn->selectrow_array($sql))[0];
     INSERT INTO person (id, name) VALUES ($newSerialID, 'Blaise Pascal');
+    $res = $dbh->do($sql);
 
You would then also have the new value stored in $newSerialID for use in other queries (e.g., as a @@ -1064,7 +1066,9 @@ BYTEA bytea variable-length byte array (null-safe) after it was inserted by default, e.g.,

     INSERT INTO person (name) VALUES ('Blaise Pascal');
-    $newID = currval('person_id_seq');
+    $res = $conn->do($sql);
+    $sql = "SELECT currval('person_id_seq')";
+    $newSerialID = ($conn->selectrow_array($sql))[0];
 
Finally, you could use the OID returned from the INSERT statement to look up the @@ -1076,7 +1080,8 @@ BYTEA bytea variable-length byte array (null-safe)

4.16.3) Don't currval() and nextval() lead to a race condition with other users?

-

No. This is handled by the backends.

+

No. Currval() returns the current value assigned by your + backend, not by all users.

4.17) What is an OID? What is a TID?