]> granicus.if.org Git - postgresql/blob - src/test/regress/expected/sequence.out
Fix all known problems with pg_dump's handling of serial sequences
[postgresql] / src / test / regress / expected / sequence.out
1 ---
2 --- test creation of SERIAL column
3 ---
4  
5 CREATE TABLE serialTest (f1 text, f2 serial);
6 NOTICE:  CREATE TABLE will create implicit sequence "serialtest_f2_seq" for serial column "serialtest.f2"
7  
8 INSERT INTO serialTest VALUES ('foo');
9 INSERT INTO serialTest VALUES ('bar');
10 INSERT INTO serialTest VALUES ('force', 100);
11 INSERT INTO serialTest VALUES ('wrong', NULL);
12 ERROR:  null value in column "f2" violates not-null constraint
13  
14 SELECT * FROM serialTest;
15   f1   | f2  
16 -------+-----
17  foo   |   1
18  bar   |   2
19  force | 100
20 (3 rows)
21
22 -- basic sequence operations using both text and oid references
23 CREATE SEQUENCE sequence_test;
24  
25 SELECT nextval('sequence_test'::text);
26  nextval 
27 ---------
28        1
29 (1 row)
30
31 SELECT nextval('sequence_test'::regclass);
32  nextval 
33 ---------
34        2
35 (1 row)
36
37 SELECT currval('sequence_test'::text);
38  currval 
39 ---------
40        2
41 (1 row)
42
43 SELECT currval('sequence_test'::regclass);
44  currval 
45 ---------
46        2
47 (1 row)
48
49 SELECT setval('sequence_test'::text, 32);
50  setval 
51 --------
52      32
53 (1 row)
54
55 SELECT nextval('sequence_test'::regclass);
56  nextval 
57 ---------
58       33
59 (1 row)
60
61 SELECT setval('sequence_test'::text, 99, false);
62  setval 
63 --------
64      99
65 (1 row)
66
67 SELECT nextval('sequence_test'::regclass);
68  nextval 
69 ---------
70       99
71 (1 row)
72
73 SELECT setval('sequence_test'::regclass, 32);
74  setval 
75 --------
76      32
77 (1 row)
78
79 SELECT nextval('sequence_test'::text);
80  nextval 
81 ---------
82       33
83 (1 row)
84
85 SELECT setval('sequence_test'::regclass, 99, false);
86  setval 
87 --------
88      99
89 (1 row)
90
91 SELECT nextval('sequence_test'::text);
92  nextval 
93 ---------
94       99
95 (1 row)
96
97 DROP SEQUENCE sequence_test;
98 -- renaming sequences
99 CREATE SEQUENCE foo_seq;
100 ALTER TABLE foo_seq RENAME TO foo_seq_new;
101 SELECT * FROM foo_seq_new;
102  sequence_name | last_value | increment_by |      max_value      | min_value | cache_value | log_cnt | is_cycled | is_called 
103 ---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
104  foo_seq       |          1 |            1 | 9223372036854775807 |         1 |           1 |       1 | f         | f
105 (1 row)
106
107 DROP SEQUENCE foo_seq_new;
108 -- renaming serial sequences
109 ALTER TABLE serialtest_f2_seq RENAME TO serialtest_f2_foo;
110 INSERT INTO serialTest VALUES ('more');
111 SELECT * FROM serialTest;
112   f1   | f2  
113 -------+-----
114  foo   |   1
115  bar   |   2
116  force | 100
117  more  |   3
118 (4 rows)
119
120 --
121 -- Check dependencies of serial and ordinary sequences
122 --
123 CREATE TEMP SEQUENCE myseq2;
124 CREATE TEMP SEQUENCE myseq3;
125 CREATE TEMP TABLE t1 (
126   f1 serial,
127   f2 int DEFAULT nextval('myseq2'),
128   f3 int DEFAULT nextval('myseq3'::text)
129 );
130 NOTICE:  CREATE TABLE will create implicit sequence "t1_f1_seq" for serial column "t1.f1"
131 -- Both drops should fail, but with different error messages:
132 DROP SEQUENCE t1_f1_seq;
133 NOTICE:  default for table t1 column f1 depends on sequence t1_f1_seq
134 ERROR:  cannot drop sequence t1_f1_seq because other objects depend on it
135 HINT:  Use DROP ... CASCADE to drop the dependent objects too.
136 DROP SEQUENCE myseq2;
137 NOTICE:  default for table t1 column f2 depends on sequence myseq2
138 ERROR:  cannot drop sequence myseq2 because other objects depend on it
139 HINT:  Use DROP ... CASCADE to drop the dependent objects too.
140 -- This however will work:
141 DROP SEQUENCE myseq3;
142 DROP TABLE t1;
143 -- Fails because no longer existent:
144 DROP SEQUENCE t1_f1_seq;
145 ERROR:  sequence "t1_f1_seq" does not exist
146 -- Now OK:
147 DROP SEQUENCE myseq2;
148 --
149 -- Alter sequence
150 --
151 CREATE SEQUENCE sequence_test2 START WITH 32;
152 SELECT nextval('sequence_test2');
153  nextval 
154 ---------
155       32
156 (1 row)
157
158 ALTER SEQUENCE sequence_test2 RESTART WITH 16
159          INCREMENT BY 4 MAXVALUE 22 MINVALUE 5 CYCLE;
160 SELECT nextval('sequence_test2');
161  nextval 
162 ---------
163       16
164 (1 row)
165
166 SELECT nextval('sequence_test2');
167  nextval 
168 ---------
169       20
170 (1 row)
171
172 SELECT nextval('sequence_test2');
173  nextval 
174 ---------
175        5
176 (1 row)
177
178 -- Test comments
179 COMMENT ON SEQUENCE asdf IS 'won''t work';
180 ERROR:  relation "asdf" does not exist
181 COMMENT ON SEQUENCE sequence_test2 IS 'will work';
182 COMMENT ON SEQUENCE sequence_test2 IS NULL;
183 -- Test lastval()
184 CREATE SEQUENCE seq;
185 SELECT nextval('seq');
186  nextval 
187 ---------
188        1
189 (1 row)
190
191 SELECT lastval();
192  lastval 
193 ---------
194        1
195 (1 row)
196
197 SELECT setval('seq', 99);
198  setval 
199 --------
200      99
201 (1 row)
202
203 SELECT lastval();
204  lastval 
205 ---------
206       99
207 (1 row)
208
209 CREATE SEQUENCE seq2;
210 SELECT nextval('seq2');
211  nextval 
212 ---------
213        1
214 (1 row)
215
216 SELECT lastval();
217  lastval 
218 ---------
219        1
220 (1 row)
221
222 DROP SEQUENCE seq2;
223 -- should fail
224 SELECT lastval();
225 ERROR:  lastval is not yet defined in this session
226 CREATE USER seq_user;
227 BEGIN;
228 SET LOCAL SESSION AUTHORIZATION seq_user;
229 CREATE SEQUENCE seq3;
230 SELECT nextval('seq3');
231  nextval 
232 ---------
233        1
234 (1 row)
235
236 REVOKE ALL ON seq3 FROM seq_user;
237 SELECT lastval();
238 ERROR:  permission denied for sequence seq3
239 ROLLBACK;
240 DROP USER seq_user;
241 DROP SEQUENCE seq;