Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
cd2cf745
Commit
cd2cf745
authored
Oct 09, 2007
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update sequence FAQ items, per suggestion from Pavel Stehule.
parent
81f285da
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
26 additions
and
45 deletions
+26
-45
doc/FAQ
doc/FAQ
+11
-20
doc/src/FAQ/FAQ.html
doc/src/FAQ/FAQ.html
+15
-25
No files found.
doc/FAQ
View file @
cd2cf745
Frequently Asked Questions (FAQ) for PostgreSQL
Last updated:
Mon Oct 8 23:19:46
EDT 2007
Last updated:
Tue Oct 9 15:52:10
EDT 2007
Current maintainer: Bruce Momjian (bruce@momjian.us)
...
...
@@ -697,29 +697,20 @@
name TEXT
);
See the create_sequence manual page for more information about
sequences.
Automatically created sequence are named <table>_<serialcolumn>_seq,
where table and serialcolumn are the names of the table and SERIAL
column, respectively. See the create_sequence manual page for more
information about sequences.
4.11.2) How do I get the value of a SERIAL insert?
One approach is 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.11.1, an example in a
pseudo-language would look like this:
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
You would then also have the new value stored in new_id for use in
other queries (e.g., as a foreign key to the person table). Note that
the name of the automatically created SEQUENCE object will be named
<table>_< serialcolumn>_seq, where table and serialcolumn are the
names of your table and your SERIAL column, respectively.
Alternatively, you could retrieve the assigned SERIAL value with the
currval() function after it was inserted by default, e.g.,
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
The simplest way is to retrieve the assigned SERIAL value with
RETURNING. Using the example table in 4.11.1, it would look like this:
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
You can also call nextval() and use that value in the INSERT, or call
currval() after the INSERT.
4.11.3) Doesn't currval() lead to a race condition with other users?
No. currval() returns the current value assigned by your session, not
...
...
doc/src/FAQ/FAQ.html
View file @
cd2cf745
...
...
@@ -10,7 +10,7 @@
alink=
"#0000ff"
>
<H1>
Frequently Asked Questions (FAQ) for PostgreSQL
</H1>
<P>
Last updated:
Mon Oct 8 23:19:46
EDT 2007
</P>
<P>
Last updated:
Tue Oct 9 15:52:10
EDT 2007
</P>
<P>
Current maintainer: Bruce Momjian (
<A
href=
"mailto:bruce@momjian.us"
>
bruce@momjian.us
</A>
)
...
...
@@ -916,38 +916,28 @@ length</TD></TR>
);
</PRE>
See the
<I>
create_sequence
</I>
manual page for more information
about sequences.
<P>
Automatically created sequence are named
<
<I>
table
</I>
>
_
<
<I>
serialcolumn
</I>
>
_
<I>
seq
</I>
, where
<I>
table
</I>
and
<I>
serialcolumn
</I>
are the names of the table and
<SMALL>
SERIAL
</SMALL>
column, respectively. See the
<I>
create_sequence
</I>
manual page for more information about
sequences.
</P>
<H3
id=
"item4.11.2"
>
4.11.2) How do I get the value of a
<SMALL>
SERIAL
</SMALL>
insert?
</H3>
<P>
One approach is to retrieve the next
<SMALL>
SERIAL
</SMALL>
value
from the sequence object with the
<I>
nextval()
</I>
function
<I>
before
</I>
inserting and then insert it explicitly. Using the
example table in
<A
href=
"#item4.11.1"
>
4.11.1
</A>
, an example in a
pseudo-language would look like this:
</P>
<PRE>
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
</PRE>
<P>
The simplest way is to retrieve the assigned
<SMALL>
SERIAL
</SMALL>
value with
<SMALL>
RETURNING
</SMALL>
. Using the example table in
<A
href=
"#item4.11.1"
>
4.11.1
</A>
, it would look like this:
</P>
You would then also have the new value stored in
<CODE>
new_id
</CODE>
for use in other queries (e.g., as a foreign key to the
<CODE>
person
</CODE>
table). Note that the name of the automatically created
<SMALL>
SEQUENCE
</SMALL>
object will be named
<
<I>
table
</I>
>
_
<
<I>
serialcolumn
</I>
>
_
<I>
seq
</I>
, where
<I>
table
</I>
and
<I>
serialcolumn
</I>
are the names of your table and your
<SMALL>
SERIAL
</SMALL>
column,
respectively.
<P>
Alternatively, you could retrieve the assigned
<SMALL>
SERIAL
</SMALL>
value with the
<I>
currval()
</I>
function
<I>
after
</I>
it was inserted by
default, e.g.,
</P>
<PRE>
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
</PRE>
You can also call
<I>
nextval()
</I>
and use that value in the
<SMALL>
INSERT
</SMALL>
, or call
<I>
currval()
</I>
<I>
after
</I>
the
<SMALL>
INSERT
</SMALL>
.
<H3
id=
"item4.11.3"
>
4.11.3) Doesn't
<I>
currval()
</I>
lead to a race condition with other users?
</H3>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment