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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user