-- OWNED BY errors CREATE SEQUENCE sequence_testx OWNED BY nobody; -- nonsense word CREATE SEQUENCE sequence_testx OWNED BY pg_class_oid_index.oid; -- not a table CREATE SEQUENCE sequence_testx OWNED BY pg_class.relname; -- not same schema CREATETABLE sequence_test_table (a int); CREATE SEQUENCE sequence_testx OWNED BY sequence_test_table.b; -- wrong column DROPTABLE sequence_test_table;
ALTER SEQUENCE sequence_test5 ASsmallint; -- success, max will be adjusted ALTER SEQUENCE sequence_test8 ASsmallint; -- fail, max has to be adjusted ALTER SEQUENCE sequence_test8 ASsmallint MAXVALUE 20000; -- ok now ALTER SEQUENCE sequence_test9 ASsmallint; -- success, min will be adjusted ALTER SEQUENCE sequence_test10 ASsmallint; -- fail, min has to be adjusted ALTER SEQUENCE sequence_test10 ASsmallint MINVALUE -20000; -- ok now
ALTER SEQUENCE sequence_test11 ASint; -- max will be adjusted ALTER SEQUENCE sequence_test12 ASint; -- min will be adjusted ALTER SEQUENCE sequence_test13 ASint; -- min and max will be adjusted ALTER SEQUENCE sequence_test14 ASint; -- min and max will be adjusted
-- renaming sequences CREATE SEQUENCE foo_seq; ALTERTABLE foo_seq RENAMETO foo_seq_new; SELECT * FROM foo_seq_new; SELECT nextval('foo_seq_new'); SELECT nextval('foo_seq_new'); -- log_cnt can be higher if there is a checkpoint just at the right -- time, so just test for the expected range SELECT last_value, log_cnt IN (31, 32) AS log_cnt_ok, is_called FROM foo_seq_new; DROP SEQUENCE foo_seq_new;
-- renaming serial sequences ALTERTABLE serialtest1_f2_seq RENAMETO serialtest1_f2_foo; INSERTINTO serialTest1 VALUES ('more'); SELECT * FROM serialTest1;
-- -- Check dependencies of serial and ordinary sequences -- CREATE TEMP SEQUENCE myseq2; CREATE TEMP SEQUENCE myseq3; CREATE TEMP TABLE t1 (
f1 serial,
f2 intDEFAULT nextval('myseq2'),
f3 intDEFAULT nextval('myseq3'::text)
); -- Both drops should fail, but with different error messages: DROP SEQUENCE t1_f1_seq; DROP SEQUENCE myseq2; -- This however will work: DROP SEQUENCE myseq3; DROPTABLE t1; -- Fails because no longer existent: DROP SEQUENCE t1_f1_seq; -- Now OK: DROP SEQUENCE myseq2;
CREATE SEQUENCE sequence_test3; -- not read from, to test is_called
-- Information schema SELECT * FROM information_schema.sequences WHERE sequence_name ~ ANY(ARRAY['sequence_test', 'serialtest']) ORDERBY sequence_name ASC;
SELECT schemaname, sequencename, start_value, min_value, max_value, increment_by, cycle, cache_size, last_value FROM pg_sequences WHERE sequencename ~ ANY(ARRAY['sequence_test', 'serialtest']) ORDERBY sequencename ASC;
SELECT * FROM pg_sequence_parameters('sequence_test4'::regclass);
\d sequence_test4
\d serialtest2_f2_seq
-- Test comments
COMMENT ON SEQUENCE asdf IS'won''t work';
COMMENT ON SEQUENCE sequence_test2 IS'will work';
COMMENT ON SEQUENCE sequence_test2 ISNULL;
DROP SEQUENCE seq2; -- should fail SELECT lastval();
-- unlogged sequences -- (more tests in src/test/recovery/) CREATE UNLOGGED SEQUENCE sequence_test_unlogged; ALTER SEQUENCE sequence_test_unlogged SET LOGGED;
\d sequence_test_unlogged ALTER SEQUENCE sequence_test_unlogged SET UNLOGGED;
\d sequence_test_unlogged DROP SEQUENCE sequence_test_unlogged;
-- Test sequences in read-only transactions CREATE TEMPORARY SEQUENCE sequence_test_temp1;
START TRANSACTION READ ONLY; SELECT nextval('sequence_test_temp1'); -- ok SELECT nextval('sequence_test2'); -- error
ROLLBACK;
START TRANSACTION READ ONLY; SELECT setval('sequence_test_temp1', 1); -- ok SELECT setval('sequence_test2', 1); -- error
ROLLBACK;
-- privileges tests
CREATE USER regress_seq_user;
-- nextval
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; REVOKEALLON seq3 FROM regress_seq_user; GRANTSELECTON seq3 TO regress_seq_user; SELECT nextval('seq3');
ROLLBACK;
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; REVOKEALLON seq3 FROM regress_seq_user; GRANTUPDATEON seq3 TO regress_seq_user; SELECT nextval('seq3');
ROLLBACK;
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; REVOKEALLON seq3 FROM regress_seq_user; GRANTUSAGEON seq3 TO regress_seq_user; SELECT nextval('seq3');
ROLLBACK;
-- currval
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; SELECT nextval('seq3'); REVOKEALLON seq3 FROM regress_seq_user; GRANTSELECTON seq3 TO regress_seq_user; SELECT currval('seq3');
ROLLBACK;
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; SELECT nextval('seq3'); REVOKEALLON seq3 FROM regress_seq_user; GRANTUPDATEON seq3 TO regress_seq_user; SELECT currval('seq3');
ROLLBACK;
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; SELECT nextval('seq3'); REVOKEALLON seq3 FROM regress_seq_user; GRANTUSAGEON seq3 TO regress_seq_user; SELECT currval('seq3');
ROLLBACK;
-- lastval
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; SELECT nextval('seq3'); REVOKEALLON seq3 FROM regress_seq_user; GRANTSELECTON seq3 TO regress_seq_user; SELECT lastval();
ROLLBACK;
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; SELECT nextval('seq3'); REVOKEALLON seq3 FROM regress_seq_user; GRANTUPDATEON seq3 TO regress_seq_user; SELECT lastval();
ROLLBACK;
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; SELECT nextval('seq3'); REVOKEALLON seq3 FROM regress_seq_user; GRANTUSAGEON seq3 TO regress_seq_user; SELECT lastval();
ROLLBACK;
-- setval
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; CREATE SEQUENCE seq3; REVOKEALLON seq3 FROM regress_seq_user;
SAVEPOINT save; SELECT setval('seq3', 5);
ROLLBACK TO save; GRANTUPDATEON seq3 TO regress_seq_user; SELECT setval('seq3', 5); SELECT nextval('seq3');
ROLLBACK;
-- ALTER SEQUENCE
BEGIN; SET LOCAL SESSION AUTHORIZATION regress_seq_user; ALTER SEQUENCE sequence_test2 START WITH1;
ROLLBACK;
-- Sequences should get wiped out as well: DROPTABLE serialTest1, serialTest2;
-- Make sure sequences are gone: SELECT * FROM information_schema.sequences WHERE sequence_name IN
('sequence_test2', 'serialtest2_f2_seq', 'serialtest2_f3_seq', 'serialtest2_f4_seq', 'serialtest2_f5_seq', 'serialtest2_f6_seq') ORDERBY sequence_name ASC;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.