1
1
--
2
2
-- Check constraints
3
- -- Constraints can be specified with either DEFAULT or CHECK clauses.
3
+ -- Constraints can be specified with:
4
+ -- - DEFAULT clause
5
+ -- - CHECK clauses
6
+ -- - PRIMARY KEY clauses
7
+ -- - UNIQUE clauses
4
8
--
5
9
6
10
--
7
11
-- DEFAULT syntax
8
12
--
9
13
10
14
CREATE TABLE DEFAULT_TBL (i int DEFAULT 100,
11
- x text DEFAULT 'vadim', f float8 DEFAULT 123.456);
15
+ x text DEFAULT 'vadim', f float8 DEFAULT 123.456);
12
16
13
17
INSERT INTO DEFAULT_TBL VALUES (1, 'thomas', 57.0613);
14
18
INSERT INTO DEFAULT_TBL VALUES (1, 'bruce');
15
19
INSERT INTO DEFAULT_TBL (i, f) VALUES (2, 987.654);
16
- INSERT INTO DEFAULT_TBL (x) VALUES ('tgl ');
20
+ INSERT INTO DEFAULT_TBL (x) VALUES ('marc ');
17
21
INSERT INTO DEFAULT_TBL VALUES (3, null, 1.0);
18
22
19
- SELECT '' AS four , * FROM DEFAULT_TBL;
23
+ SELECT '' AS five , * FROM DEFAULT_TBL;
20
24
21
25
CREATE SEQUENCE DEFAULT_SEQ;
26
+
22
27
CREATE TABLE DEFAULTEXPR_TBL (i1 int DEFAULT 100 + (200-199) * 2,
23
- i2 int DEFAULT nextval('default_seq'));
28
+ i2 int DEFAULT nextval('default_seq'));
24
29
25
30
INSERT INTO DEFAULTEXPR_TBL VALUES (-1, -2);
26
31
INSERT INTO DEFAULTEXPR_TBL (i1) VALUES (-3);
27
32
INSERT INTO DEFAULTEXPR_TBL (i2) VALUES (-4);
28
33
INSERT INTO DEFAULTEXPR_TBL (i2) VALUES (NULL);
34
+
29
35
SELECT '' AS four, * FROM DEFAULTEXPR_TBL;
30
36
31
37
-- errors
@@ -39,8 +45,8 @@ CREATE TABLE error_tbl (b1 bool DEFAULT 1 < 2);
39
45
-- CHECK syntax
40
46
--
41
47
42
- CREATE TABLE CHECK_TBL (x int)
43
- CONSTRAINT CHECK_CON CHECK (x > 3);
48
+ CREATE TABLE CHECK_TBL (x int,
49
+ CONSTRAINT CHECK_CON CHECK (x > 3) );
44
50
45
51
INSERT INTO CHECK_TBL VALUES (5);
46
52
INSERT INTO CHECK_TBL VALUES (4);
@@ -49,32 +55,40 @@ INSERT INTO CHECK_TBL VALUES (2);
49
55
INSERT INTO CHECK_TBL VALUES (6);
50
56
INSERT INTO CHECK_TBL VALUES (1);
51
57
58
+ SELECT '' AS three, * FROM CHECK_TBL;
59
+
52
60
CREATE SEQUENCE CHECK_SEQ;
53
- CREATE TABLE CHECK2_TBL (x int, y text, z int)
54
- CONSTRAINT SEQUENCE_CON CHECK (x > 3 and y <> 'check failed' and x < 8);
61
+
62
+ CREATE TABLE CHECK2_TBL (x int, y text, z int,
63
+ CONSTRAINT SEQUENCE_CON
64
+ CHECK (x > 3 and y <> 'check failed' and z < 8));
65
+
55
66
INSERT INTO CHECK2_TBL VALUES (4, 'check ok', -2);
56
67
INSERT INTO CHECK2_TBL VALUES (1, 'x check failed', -2);
57
68
INSERT INTO CHECK2_TBL VALUES (5, 'z check failed', 10);
58
69
INSERT INTO CHECK2_TBL VALUES (0, 'check failed', -2);
59
70
INSERT INTO CHECK2_TBL VALUES (6, 'check failed', 11);
60
71
INSERT INTO CHECK2_TBL VALUES (7, 'check ok', 7);
61
72
73
+ SELECT '' AS two, * from CHECK2_TBL;
74
+
62
75
--
63
76
-- Check constraints on INSERT
64
77
--
65
78
66
79
CREATE SEQUENCE INSERT_SEQ;
67
80
68
81
CREATE TABLE INSERT_TBL (x INT DEFAULT nextval('insert_seq'),
69
- y TEXT DEFAULT '-NULL-', z INT DEFAULT -1 * currval('insert_seq') )
70
- CONSTRAINT INSERT_CON CHECK (x >= 3 AND y <> 'check failed' AND x < 8),
71
- CHECK x + z = 0;
82
+ y TEXT DEFAULT '-NULL-', z INT DEFAULT -1 * currval('insert_seq'),
83
+ CONSTRAINT INSERT_CON CHECK (x >= 3 AND y <> 'check failed' AND x < 8),
84
+ CHECK ( x + z = 0)) ;
72
85
73
86
INSERT INTO INSERT_TBL VALUES (null, null, null);
74
87
INSERT INTO INSERT_TBL(x,z) VALUES (2, -2);
75
88
76
- SELECT * FROM INSERT_TBL;
77
- SELECT nextval('insert_seq');
89
+ SELECT '' AS zero, * FROM INSERT_TBL;
90
+
91
+ SELECT 'one' AS one, nextval('insert_seq');
78
92
79
93
INSERT INTO INSERT_TBL(y) VALUES ('Y');
80
94
INSERT INTO INSERT_TBL(y) VALUES ('Y');
@@ -83,34 +97,45 @@ INSERT INTO INSERT_TBL(z,x) VALUES (-7, 7);
83
97
INSERT INTO INSERT_TBL VALUES (5, 'check failed', -5);
84
98
INSERT INTO INSERT_TBL VALUES (7, '!check failed', -7);
85
99
INSERT INTO INSERT_TBL(y) VALUES ('-!NULL-');
86
- SELECT * FROM INSERT_TBL;
100
+
101
+ SELECT '' AS four, * FROM INSERT_TBL;
102
+
87
103
INSERT INTO INSERT_TBL(y,z) VALUES ('check failed', 4);
88
104
INSERT INTO INSERT_TBL(x,y) VALUES (5, 'check failed');
89
105
INSERT INTO INSERT_TBL(x,y) VALUES (5, '!check failed');
90
106
INSERT INTO INSERT_TBL(y) VALUES ('-!NULL-');
91
- SELECT * FROM INSERT_TBL;
92
- SELECT nextval('insert_seq');
107
+
108
+ SELECT '' AS six, * FROM INSERT_TBL;
109
+
110
+ SELECT 'seven' AS one, nextval('insert_seq');
111
+
93
112
INSERT INTO INSERT_TBL(y) VALUES ('Y');
94
- SELECT currval('insert_seq');
113
+
114
+ SELECT 'eight' AS one, currval('insert_seq');
95
115
96
116
--
97
117
-- Check constraints on INSERT INTO
98
118
--
99
119
100
120
DELETE FROM INSERT_TBL;
101
121
DROP SEQUENCE INSERT_SEQ;
122
+
102
123
CREATE SEQUENCE INSERT_SEQ START 4;
124
+
103
125
CREATE TABLE TEMP (xd INT, yd TEXT, zd INT);
104
126
105
127
INSERT INTO TEMP VALUES (null, 'Y', null);
106
128
INSERT INTO TEMP VALUES (5, '!check failed', null);
107
129
INSERT INTO TEMP VALUES (null, 'try again', null);
108
130
INSERT INTO INSERT_TBL(y) select yd from TEMP;
109
- SELECT * FROM INSERT_TBL;
131
+
132
+ SELECT '' AS three, * FROM INSERT_TBL;
133
+
110
134
INSERT INTO INSERT_TBL SELECT * FROM TEMP WHERE yd = 'try again';
111
135
INSERT INTO INSERT_TBL(y,z) SELECT yd, -7 FROM TEMP WHERE yd = 'try again';
112
136
INSERT INTO INSERT_TBL(y,z) SELECT yd, -8 FROM TEMP WHERE yd = 'try again';
113
- SELECT * FROM INSERT_TBL;
137
+
138
+ SELECT '' AS four, * FROM INSERT_TBL;
114
139
115
140
DROP TABLE TEMP;
116
141
@@ -122,17 +147,87 @@ UPDATE INSERT_TBL SET x = NULL WHERE x = 6;
122
147
UPDATE INSERT_TBL SET x = 6 WHERE x = 6;
123
148
UPDATE INSERT_TBL SET x = -z, z = -x;
124
149
UPDATE INSERT_TBL SET x = z, z = x;
150
+
125
151
SELECT * FROM INSERT_TBL;
126
152
153
+ -- DROP TABLE INSERT_TBL;
154
+
127
155
--
128
156
-- Check constraints on COPY FROM
129
157
--
130
158
131
- CREATE TABLE COPY_TBL (x INT, y TEXT, z INT)
132
- CONSTRAINT COPY_CON CHECK (x > 3 AND y <> 'check failed' AND x < 7 );
159
+ CREATE TABLE COPY_TBL (x INT, y TEXT, z INT,
160
+ CONSTRAINT COPY_CON
161
+ CHECK (x > 3 AND y <> 'check failed' AND x < 7 ));
133
162
134
163
COPY COPY_TBL FROM '_OBJWD_/data/constro.data';
135
- SELECT * FROM COPY_TBL;
164
+
165
+ SELECT '' AS two, * FROM COPY_TBL;
166
+
136
167
COPY COPY_TBL FROM '_OBJWD_/data/constrf.data';
137
168
138
169
SELECT * FROM COPY_TBL;
170
+
171
+ --
172
+ -- Primary keys
173
+ --
174
+
175
+ CREATE TABLE PRIMARY_TBL (i int PRIMARY KEY, t text);
176
+
177
+ INSERT INTO PRIMARY_TBL VALUES (1, 'one');
178
+ INSERT INTO PRIMARY_TBL VALUES (2, 'two');
179
+ INSERT INTO PRIMARY_TBL VALUES (1, 'three');
180
+ INSERT INTO PRIMARY_TBL VALUES (4, 'three');
181
+ INSERT INTO PRIMARY_TBL VALUES (5, 'one');
182
+ INSERT INTO PRIMARY_TBL (t) VALUES ('six');
183
+
184
+ SELECT '' AS four, * FROM PRIMARY_TBL;
185
+
186
+ DROP TABLE PRIMARY_TBL;
187
+
188
+ CREATE TABLE PRIMARY_TBL (i int, t text,
189
+ PRIMARY KEY(i,t));
190
+
191
+ INSERT INTO PRIMARY_TBL VALUES (1, 'one');
192
+ INSERT INTO PRIMARY_TBL VALUES (2, 'two');
193
+ INSERT INTO PRIMARY_TBL VALUES (1, 'three');
194
+ INSERT INTO PRIMARY_TBL VALUES (4, 'three');
195
+ INSERT INTO PRIMARY_TBL VALUES (5, 'one');
196
+ INSERT INTO PRIMARY_TBL (t) VALUES ('six');
197
+
198
+ SELECT '' AS three, * FROM PRIMARY_TBL;
199
+
200
+ DROP TABLE PRIMARY_TBL;
201
+
202
+ --
203
+ -- Unique keys
204
+ --
205
+
206
+ CREATE TABLE UNIQUE_TBL (i int UNIQUE, t text);
207
+
208
+ INSERT INTO UNIQUE_TBL VALUES (1, 'one');
209
+ INSERT INTO UNIQUE_TBL VALUES (2, 'two');
210
+ INSERT INTO UNIQUE_TBL VALUES (1, 'three');
211
+ INSERT INTO UNIQUE_TBL VALUES (4, 'four');
212
+ INSERT INTO UNIQUE_TBL VALUES (5, 'one');
213
+ INSERT INTO UNIQUE_TBL (t) VALUES ('six');
214
+ INSERT INTO UNIQUE_TBL (t) VALUES ('seven');
215
+
216
+ SELECT '' AS five, * FROM UNIQUE_TBL;
217
+
218
+ DROP TABLE UNIQUE_TBL;
219
+
220
+ CREATE TABLE UNIQUE_TBL (i int, t text,
221
+ UNIQUE(i,t));
222
+
223
+ INSERT INTO UNIQUE_TBL VALUES (1, 'one');
224
+ INSERT INTO UNIQUE_TBL VALUES (2, 'two');
225
+ INSERT INTO UNIQUE_TBL VALUES (1, 'three');
226
+ INSERT INTO UNIQUE_TBL VALUES (1, 'one');
227
+ INSERT INTO UNIQUE_TBL VALUES (5, 'one');
228
+ INSERT INTO UNIQUE_TBL (t) VALUES ('six');
229
+
230
+ SELECT '' AS five, * FROM UNIQUE_TBL;
231
+
232
+ DROP TABLE UNIQUE_TBL;
233
+
0 commit comments