1
0
mirror of https://github.com/postgres/postgres.git synced 2025-12-10 14:22:35 +03:00

Add a function lastval(), which returns the value returned by the

last nextval() or setval() performed by the current session. Update the
docs, add regression tests, and bump the catalog version. Patch from
Dennis Björklund, various improvements by Neil Conway.
This commit is contained in:
Neil Conway
2005-06-07 07:08:35 +00:00
parent c59887f916
commit 657c098e41
7 changed files with 202 additions and 36 deletions

View File

@@ -76,3 +76,62 @@ COMMENT ON SEQUENCE asdf IS 'won''t work';
ERROR: relation "asdf" does not exist
COMMENT ON SEQUENCE sequence_test2 IS 'will work';
COMMENT ON SEQUENCE sequence_test2 IS NULL;
-- Test lastval()
CREATE SEQUENCE seq;
SELECT nextval('seq');
nextval
---------
1
(1 row)
SELECT lastval();
lastval
---------
1
(1 row)
SELECT setval('seq', 99);
setval
--------
99
(1 row)
SELECT lastval();
lastval
---------
99
(1 row)
CREATE SEQUENCE seq2;
SELECT nextval('seq2');
nextval
---------
1
(1 row)
SELECT lastval();
lastval
---------
1
(1 row)
DROP SEQUENCE seq2;
-- should fail
SELECT lastval();
ERROR: lastval is not yet defined in this session
CREATE USER seq_user;
BEGIN;
SET LOCAL SESSION AUTHORIZATION seq_user;
CREATE SEQUENCE seq3;
SELECT nextval('seq3');
nextval
---------
1
(1 row)
REVOKE ALL ON seq3 FROM seq_user;
SELECT lastval();
ERROR: permission denied for sequence seq3
ROLLBACK;
DROP USER seq_user;
DROP SEQUENCE seq;

View File

@@ -42,3 +42,30 @@ COMMENT ON SEQUENCE asdf IS 'won''t work';
COMMENT ON SEQUENCE sequence_test2 IS 'will work';
COMMENT ON SEQUENCE sequence_test2 IS NULL;
-- Test lastval()
CREATE SEQUENCE seq;
SELECT nextval('seq');
SELECT lastval();
SELECT setval('seq', 99);
SELECT lastval();
CREATE SEQUENCE seq2;
SELECT nextval('seq2');
SELECT lastval();
DROP SEQUENCE seq2;
-- should fail
SELECT lastval();
CREATE USER seq_user;
BEGIN;
SET LOCAL SESSION AUTHORIZATION seq_user;
CREATE SEQUENCE seq3;
SELECT nextval('seq3');
REVOKE ALL ON seq3 FROM seq_user;
SELECT lastval();
ROLLBACK;
DROP USER seq_user;
DROP SEQUENCE seq;