Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd711532

Browse files
committed
Additional test coverage for sequences
Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
1 parent308d868 commitd711532

File tree

2 files changed

+319
-40
lines changed

2 files changed

+319
-40
lines changed

‎src/test/regress/expected/sequence.out

Lines changed: 222 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,33 @@
1+
--
2+
-- CREATE SEQUENCE
3+
--
4+
-- various error cases
5+
CREATE UNLOGGED SEQUENCE sequence_testx;
6+
ERROR: unlogged sequences are not supported
7+
CREATE SEQUENCE sequence_testx INCREMENT BY 0;
8+
ERROR: INCREMENT must not be zero
9+
CREATE SEQUENCE sequence_testx INCREMENT BY -1 MINVALUE 20;
10+
ERROR: MINVALUE (20) must be less than MAXVALUE (-1)
11+
CREATE SEQUENCE sequence_testx INCREMENT BY 1 MAXVALUE -20;
12+
ERROR: MINVALUE (1) must be less than MAXVALUE (-20)
13+
CREATE SEQUENCE sequence_testx INCREMENT BY -1 START 10;
14+
ERROR: START value (10) cannot be greater than MAXVALUE (-1)
15+
CREATE SEQUENCE sequence_testx INCREMENT BY 1 START -10;
16+
ERROR: START value (-10) cannot be less than MINVALUE (1)
17+
CREATE SEQUENCE sequence_testx CACHE 0;
18+
ERROR: CACHE (0) must be greater than zero
19+
-- OWNED BY errors
20+
CREATE SEQUENCE sequence_testx OWNED BY nobody; -- nonsense word
21+
ERROR: invalid OWNED BY option
22+
HINT: Specify OWNED BY table.column or OWNED BY NONE.
23+
CREATE SEQUENCE sequence_testx OWNED BY pg_tables.tablename; -- not a table
24+
ERROR: referenced relation "pg_tables" is not a table or foreign table
25+
CREATE SEQUENCE sequence_testx OWNED BY pg_class.relname; -- not same schema
26+
ERROR: sequence must be in same schema as table it is linked to
27+
CREATE TABLE sequence_test_table (a int);
28+
CREATE SEQUENCE sequence_testx OWNED BY sequence_test_table.b; -- wrong column
29+
ERROR: column "b" of relation "sequence_test_table" does not exist
30+
DROP TABLE sequence_test_table;
131
---
232
--- test creation of SERIAL column
333
---
@@ -242,17 +272,38 @@ DROP SEQUENCE myseq2;
242272
-- Alter sequence
243273
--
244274
ALTER SEQUENCE IF EXISTS sequence_test2 RESTART WITH 24
245-
INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
275+
INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
246276
NOTICE: relation "sequence_test2" does not exist, skipping
277+
ALTER SEQUENCE pg_class CYCLE; -- error, not a sequence
278+
ERROR: "pg_class" is not a sequence
247279
CREATE SEQUENCE sequence_test2 START WITH 32;
280+
CREATE SEQUENCE sequence_test4 INCREMENT BY -1;
281+
SELECT nextval('sequence_test2');
282+
nextval
283+
---------
284+
32
285+
(1 row)
286+
287+
SELECT nextval('sequence_test4');
288+
nextval
289+
---------
290+
-1
291+
(1 row)
292+
293+
ALTER SEQUENCE sequence_test2 RESTART;
248294
SELECT nextval('sequence_test2');
249295
nextval
250296
---------
251297
32
252298
(1 row)
253299

300+
ALTER SEQUENCE sequence_test2 RESTART WITH 0; -- error
301+
ERROR: RESTART value (0) cannot be less than MINVALUE (1)
302+
ALTER SEQUENCE sequence_test4 RESTART WITH 40; -- error
303+
ERROR: RESTART value (40) cannot be greater than MAXVALUE (-1)
304+
-- test CYCLE and NO CYCLE
254305
ALTER SEQUENCE sequence_test2 RESTART WITH 24
255-
INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
306+
INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
256307
SELECT nextval('sequence_test2');
257308
nextval
258309
---------
@@ -277,13 +328,26 @@ SELECT nextval('sequence_test2');
277328
36
278329
(1 row)
279330

280-
SELECT nextval('sequence_test2');
331+
SELECT nextval('sequence_test2'); -- cycled
281332
nextval
282333
---------
283334
5
284335
(1 row)
285336

286-
ALTER SEQUENCE sequence_test2 RESTART;
337+
ALTER SEQUENCE sequence_test2 RESTART WITH 24
338+
NO CYCLE;
339+
SELECT nextval('sequence_test2');
340+
nextval
341+
---------
342+
24
343+
(1 row)
344+
345+
SELECT nextval('sequence_test2');
346+
nextval
347+
---------
348+
28
349+
(1 row)
350+
287351
SELECT nextval('sequence_test2');
288352
nextval
289353
---------
@@ -296,45 +360,121 @@ SELECT nextval('sequence_test2');
296360
36
297361
(1 row)
298362

363+
SELECT nextval('sequence_test2'); -- error
364+
ERROR: nextval: reached maximum value of sequence "sequence_test2" (36)
365+
ALTER SEQUENCE sequence_test2 RESTART WITH -24 START WITH -24
366+
INCREMENT BY -4 MINVALUE -36 MAXVALUE -5 CYCLE;
299367
SELECT nextval('sequence_test2');
300368
nextval
301369
---------
302-
5
370+
-24
371+
(1 row)
372+
373+
SELECT nextval('sequence_test2');
374+
nextval
375+
---------
376+
-28
377+
(1 row)
378+
379+
SELECT nextval('sequence_test2');
380+
nextval
381+
---------
382+
-32
383+
(1 row)
384+
385+
SELECT nextval('sequence_test2');
386+
nextval
387+
---------
388+
-36
389+
(1 row)
390+
391+
SELECT nextval('sequence_test2'); -- cycled
392+
nextval
393+
---------
394+
-5
395+
(1 row)
396+
397+
ALTER SEQUENCE sequence_test2 RESTART WITH -24
398+
NO CYCLE;
399+
SELECT nextval('sequence_test2');
400+
nextval
401+
---------
402+
-24
403+
(1 row)
404+
405+
SELECT nextval('sequence_test2');
406+
nextval
407+
---------
408+
-28
409+
(1 row)
410+
411+
SELECT nextval('sequence_test2');
412+
nextval
413+
---------
414+
-32
415+
(1 row)
416+
417+
SELECT nextval('sequence_test2');
418+
nextval
419+
---------
420+
-36
421+
(1 row)
422+
423+
SELECT nextval('sequence_test2'); -- error
424+
ERROR: nextval: reached minimum value of sequence "sequence_test2" (-36)
425+
-- reset
426+
ALTER SEQUENCE IF EXISTS sequence_test2 RESTART WITH 32 START WITH 32
427+
INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
428+
SELECT setval('sequence_test2', -100); -- error
429+
ERROR: setval: value -100 is out of bounds for sequence "sequence_test2" (5..36)
430+
SELECT setval('sequence_test2', 100); -- error
431+
ERROR: setval: value 100 is out of bounds for sequence "sequence_test2" (5..36)
432+
SELECT setval('sequence_test2', 5);
433+
setval
434+
--------
435+
5
303436
(1 row)
304437

305438
CREATE SEQUENCE sequence_test3; -- not read from, to test is_called
306439
-- Information schema
307-
SELECT * FROM information_schema.sequences WHERE sequence_name IN
308-
('sequence_test2', 'sequence_test3', 'serialtest2_f2_seq', 'serialtest2_f3_seq',
309-
'serialtest2_f4_seq', 'serialtest2_f5_seq', 'serialtest2_f6_seq')
440+
SELECT * FROM information_schema.sequences
441+
WHERE sequence_name ~ ANY(ARRAY['sequence_test', 'serialtest'])
310442
ORDER BY sequence_name ASC;
311-
sequence_catalog | sequence_schema | sequence_name | data_type | numeric_precision | numeric_precision_radix | numeric_scale | start_value | minimum_value | maximum_value | increment | cycle_option
312-
------------------+-----------------+--------------------+-----------+-------------------+-------------------------+---------------+-------------+---------------+---------------------+-----------+--------------
313-
regression | public | sequence_test2 | bigint | 64 | 2 | 0 | 32 | 5 | 36 | 4 | YES
314-
regression | public | sequence_test3 | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
315-
regression | public | serialtest2_f2_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
316-
regression | public | serialtest2_f3_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
317-
regression | public | serialtest2_f4_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
318-
regression | public | serialtest2_f5_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
319-
regression | public | serialtest2_f6_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
320-
(7 rows)
443+
sequence_catalog | sequence_schema | sequence_name | data_type | numeric_precision | numeric_precision_radix | numeric_scale | start_value | minimum_value | maximum_value | increment | cycle_option
444+
------------------+-----------------+--------------------+-----------+-------------------+-------------------------+---------------+-------------+----------------------+---------------------+-----------+--------------
445+
regression | public | sequence_test2 | bigint | 64 | 2 | 0 | 32 | 5 | 36 | 4 | YES
446+
regression | public | sequence_test3 | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
447+
regression | public | sequence_test4 | bigint | 64 | 2 | 0 | -1 | -9223372036854775808 | -1 | -1 | NO
448+
regression | public | serialtest2_f2_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
449+
regression | public | serialtest2_f3_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
450+
regression | public | serialtest2_f4_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
451+
regression | public | serialtest2_f5_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
452+
regression | public | serialtest2_f6_seq | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
453+
regression | public | serialtest_f2_foo | bigint | 64 | 2 | 0 | 1 | 1 | 9223372036854775807 | 1 | NO
454+
(9 rows)
321455

322456
SELECT schemaname, sequencename, start_value, min_value, max_value, increment_by, cycle, cache_size, last_value
323457
FROM pg_sequences
324-
WHERE sequencename IN
325-
('sequence_test2', 'sequence_test3', 'serialtest2_f2_seq', 'serialtest2_f3_seq',
326-
'serialtest2_f4_seq', 'serialtest2_f5_seq', 'serialtest2_f6_seq')
458+
WHERE sequencename ~ ANY(ARRAY['sequence_test', 'serialtest'])
327459
ORDER BY sequencename ASC;
328-
schemaname | sequencename | start_value | min_value | max_value | increment_by | cycle | cache_size | last_value
329-
------------+--------------------+-------------+-----------+---------------------+--------------+-------+------------+------------
330-
public | sequence_test2 | 32 | 5 | 36 | 4 | t | 1 | 5
331-
public | sequence_test3 | 1 | 1 | 9223372036854775807 | 1 | f | 1 |
332-
public | serialtest2_f2_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
333-
public | serialtest2_f3_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
334-
public | serialtest2_f4_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
335-
public | serialtest2_f5_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
336-
public | serialtest2_f6_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
337-
(7 rows)
460+
schemaname | sequencename | start_value | min_value | max_value | increment_by | cycle | cache_size | last_value
461+
------------+--------------------+-------------+----------------------+---------------------+--------------+-------+------------+------------
462+
public | sequence_test2 | 32 | 5 | 36 | 4 | t | 1 | 5
463+
public | sequence_test3 | 1 | 1 | 9223372036854775807 | 1 | f | 1 |
464+
public | sequence_test4 | -1 | -9223372036854775808 | -1 | -1 | f | 1 | -1
465+
public | serialtest2_f2_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
466+
public | serialtest2_f3_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
467+
public | serialtest2_f4_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
468+
public | serialtest2_f5_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
469+
public | serialtest2_f6_seq | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 2
470+
public | serialtest_f2_foo | 1 | 1 | 9223372036854775807 | 1 | f | 1 | 3
471+
(9 rows)
472+
473+
SELECT * FROM pg_sequence_parameters('sequence_test4'::regclass);
474+
start_value | minimum_value | maximum_value | increment | cycle_option | cache_size
475+
-------------+----------------------+---------------+-----------+--------------+------------
476+
-1 | -9223372036854775808 | -1 | -1 | f | 1
477+
(1 row)
338478

339479
-- Test comments
340480
COMMENT ON SEQUENCE asdf IS 'won''t work';
@@ -388,6 +528,28 @@ DROP SEQUENCE seq2;
388528
SELECT lastval();
389529
ERROR: lastval is not yet defined in this session
390530
CREATE USER regress_seq_user;
531+
-- Test sequences in read-only transactions
532+
CREATE TEMPORARY SEQUENCE sequence_test_temp1;
533+
START TRANSACTION READ ONLY;
534+
SELECT nextval('sequence_test_temp1'); -- ok
535+
nextval
536+
---------
537+
1
538+
(1 row)
539+
540+
SELECT nextval('sequence_test2'); -- error
541+
ERROR: cannot execute nextval() in a read-only transaction
542+
ROLLBACK;
543+
START TRANSACTION READ ONLY;
544+
SELECT setval('sequence_test_temp1', 1); -- ok
545+
setval
546+
--------
547+
1
548+
(1 row)
549+
550+
SELECT setval('sequence_test2', 1); -- error
551+
ERROR: cannot execute setval() in a read-only transaction
552+
ROLLBACK;
391553
-- privileges tests
392554
-- nextval
393555
BEGIN;
@@ -523,6 +685,35 @@ SELECT lastval();
523685
1
524686
(1 row)
525687

688+
ROLLBACK;
689+
-- setval
690+
BEGIN;
691+
SET LOCAL SESSION AUTHORIZATION regress_seq_user;
692+
CREATE SEQUENCE seq3;
693+
REVOKE ALL ON seq3 FROM regress_seq_user;
694+
SAVEPOINT save;
695+
SELECT setval('seq3', 5);
696+
ERROR: permission denied for sequence seq3
697+
ROLLBACK TO save;
698+
GRANT UPDATE ON seq3 TO regress_seq_user;
699+
SELECT setval('seq3', 5);
700+
setval
701+
--------
702+
5
703+
(1 row)
704+
705+
SELECT nextval('seq3');
706+
nextval
707+
---------
708+
6
709+
(1 row)
710+
711+
ROLLBACK;
712+
-- ALTER SEQUENCE
713+
BEGIN;
714+
SET LOCAL SESSION AUTHORIZATION regress_seq_user;
715+
ALTER SEQUENCE sequence_test2 START WITH 1;
716+
ERROR: must be owner of relation sequence_test2
526717
ROLLBACK;
527718
-- Sequences should get wiped out as well:
528719
DROP TABLE serialTest, serialTest2;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp