1
+ -- Default set of tests for TOAST compression, independent on compression
2
+ -- methods supported by the build.
3
+ CREATE SCHEMA pglz;
4
+ SET search_path TO pglz, public;
1
5
\set HIDE_TOAST_COMPRESSION false
2
6
-- ensure we get stable results regardless of installation's default
3
7
SET default_toast_compression = 'pglz';
@@ -6,51 +10,31 @@ CREATE TABLE cmdata(f1 text COMPRESSION pglz);
6
10
CREATE INDEX idx ON cmdata(f1);
7
11
INSERT INTO cmdata VALUES(repeat('1234567890', 1000));
8
12
\d+ cmdata
9
- Table "public .cmdata"
13
+ Table "pglz .cmdata"
10
14
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
11
15
--------+------+-----------+----------+---------+----------+-------------+--------------+-------------
12
16
f1 | text | | | | extended | pglz | |
13
17
Indexes:
14
18
"idx" btree (f1)
15
19
16
- CREATE TABLE cmdata1(f1 TEXT COMPRESSION lz4);
17
- INSERT INTO cmdata1 VALUES(repeat('1234567890', 1004));
18
- \d+ cmdata1
19
- Table "public.cmdata1"
20
- Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
21
- --------+------+-----------+----------+---------+----------+-------------+--------------+-------------
22
- f1 | text | | | | extended | lz4 | |
23
-
24
20
-- verify stored compression method in the data
25
21
SELECT pg_column_compression(f1) FROM cmdata;
26
22
pg_column_compression
27
23
-----------------------
28
24
pglz
29
25
(1 row)
30
26
31
- SELECT pg_column_compression(f1) FROM cmdata1;
32
- pg_column_compression
33
- -----------------------
34
- lz4
35
- (1 row)
36
-
37
27
-- decompress data slice
38
28
SELECT SUBSTR(f1, 200, 5) FROM cmdata;
39
29
substr
40
30
--------
41
31
01234
42
32
(1 row)
43
33
44
- SELECT SUBSTR(f1, 2000, 50) FROM cmdata1;
45
- substr
46
- ----------------------------------------------------
47
- 01234567890123456789012345678901234567890123456789
48
- (1 row)
49
-
50
34
-- copy with table creation
51
35
SELECT * INTO cmmove1 FROM cmdata;
52
36
\d+ cmmove1
53
- Table "public .cmmove1"
37
+ Table "pglz .cmmove1"
54
38
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
55
39
--------+------+-----------+----------+---------+----------+-------------+--------------+-------------
56
40
f1 | text | | | | extended | | |
@@ -61,45 +45,9 @@ SELECT pg_column_compression(f1) FROM cmmove1;
61
45
pglz
62
46
(1 row)
63
47
64
- -- copy to existing table
65
- CREATE TABLE cmmove3(f1 text COMPRESSION pglz);
66
- INSERT INTO cmmove3 SELECT * FROM cmdata;
67
- INSERT INTO cmmove3 SELECT * FROM cmdata1;
68
- SELECT pg_column_compression(f1) FROM cmmove3;
69
- pg_column_compression
70
- -----------------------
71
- pglz
72
- lz4
73
- (2 rows)
74
-
75
- -- test LIKE INCLUDING COMPRESSION
76
- CREATE TABLE cmdata2 (LIKE cmdata1 INCLUDING COMPRESSION);
77
- \d+ cmdata2
78
- Table "public.cmdata2"
79
- Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
80
- --------+------+-----------+----------+---------+----------+-------------+--------------+-------------
81
- f1 | text | | | | extended | lz4 | |
82
-
83
- DROP TABLE cmdata2;
84
48
-- try setting compression for incompressible data type
85
49
CREATE TABLE cmdata2 (f1 int COMPRESSION pglz);
86
50
ERROR: column data type integer does not support compression
87
- -- update using datum from different table
88
- CREATE TABLE cmmove2(f1 text COMPRESSION pglz);
89
- INSERT INTO cmmove2 VALUES (repeat('1234567890', 1004));
90
- SELECT pg_column_compression(f1) FROM cmmove2;
91
- pg_column_compression
92
- -----------------------
93
- pglz
94
- (1 row)
95
-
96
- UPDATE cmmove2 SET f1 = cmdata1.f1 FROM cmdata1;
97
- SELECT pg_column_compression(f1) FROM cmmove2;
98
- pg_column_compression
99
- -----------------------
100
- lz4
101
- (1 row)
102
-
103
51
-- test externally stored compressed data
104
52
CREATE OR REPLACE FUNCTION large_val() RETURNS TEXT LANGUAGE SQL AS
105
53
'select array_agg(fipshash(g::text))::text from generate_series(1, 256) g';
@@ -111,21 +59,6 @@ SELECT pg_column_compression(f1) FROM cmdata2;
111
59
pglz
112
60
(1 row)
113
61
114
- INSERT INTO cmdata1 SELECT large_val() || repeat('a', 4000);
115
- SELECT pg_column_compression(f1) FROM cmdata1;
116
- pg_column_compression
117
- -----------------------
118
- lz4
119
- lz4
120
- (2 rows)
121
-
122
- SELECT SUBSTR(f1, 200, 5) FROM cmdata1;
123
- substr
124
- --------
125
- 01234
126
- 79026
127
- (2 rows)
128
-
129
62
SELECT SUBSTR(f1, 200, 5) FROM cmdata2;
130
63
substr
131
64
--------
@@ -136,21 +69,21 @@ DROP TABLE cmdata2;
136
69
--test column type update varlena/non-varlena
137
70
CREATE TABLE cmdata2 (f1 int);
138
71
\d+ cmdata2
139
- Table "public .cmdata2"
72
+ Table "pglz .cmdata2"
140
73
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
141
74
--------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
142
75
f1 | integer | | | | plain | | |
143
76
144
77
ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE varchar;
145
78
\d+ cmdata2
146
- Table "public .cmdata2"
79
+ Table "pglz .cmdata2"
147
80
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
148
81
--------+-------------------+-----------+----------+---------+----------+-------------+--------------+-------------
149
82
f1 | character varying | | | | extended | | |
150
83
151
84
ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE int USING f1::integer;
152
85
\d+ cmdata2
153
- Table "public .cmdata2"
86
+ Table "pglz .cmdata2"
154
87
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
155
88
--------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
156
89
f1 | integer | | | | plain | | |
@@ -160,14 +93,14 @@ ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE int USING f1::integer;
160
93
ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE varchar;
161
94
ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION pglz;
162
95
\d+ cmdata2
163
- Table "public .cmdata2"
96
+ Table "pglz .cmdata2"
164
97
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
165
98
--------+-------------------+-----------+----------+---------+----------+-------------+--------------+-------------
166
99
f1 | character varying | | | | extended | pglz | |
167
100
168
101
ALTER TABLE cmdata2 ALTER COLUMN f1 SET STORAGE plain;
169
102
\d+ cmdata2
170
- Table "public .cmdata2"
103
+ Table "pglz .cmdata2"
171
104
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
172
105
--------+-------------------+-----------+----------+---------+---------+-------------+--------------+-------------
173
106
f1 | character varying | | | | plain | pglz | |
@@ -179,184 +112,54 @@ SELECT pg_column_compression(f1) FROM cmdata2;
179
112
180
113
(1 row)
181
114
182
- -- test compression with materialized view
183
- CREATE MATERIALIZED VIEW compressmv(x) AS SELECT * FROM cmdata1;
184
- \d+ compressmv
185
- Materialized view "public.compressmv"
186
- Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
187
- --------+------+-----------+----------+---------+----------+-------------+--------------+-------------
188
- x | text | | | | extended | | |
189
- View definition:
190
- SELECT f1 AS x
191
- FROM cmdata1;
192
-
193
- SELECT pg_column_compression(f1) FROM cmdata1;
194
- pg_column_compression
195
- -----------------------
196
- lz4
197
- lz4
198
- (2 rows)
199
-
200
- SELECT pg_column_compression(x) FROM compressmv;
201
- pg_column_compression
202
- -----------------------
203
- lz4
204
- lz4
205
- (2 rows)
206
-
207
- -- test compression with partition
208
- CREATE TABLE cmpart(f1 text COMPRESSION lz4) PARTITION BY HASH(f1);
209
- CREATE TABLE cmpart1 PARTITION OF cmpart FOR VALUES WITH (MODULUS 2, REMAINDER 0);
210
- CREATE TABLE cmpart2(f1 text COMPRESSION pglz);
211
- ALTER TABLE cmpart ATTACH PARTITION cmpart2 FOR VALUES WITH (MODULUS 2, REMAINDER 1);
212
- INSERT INTO cmpart VALUES (repeat('123456789', 1004));
213
- INSERT INTO cmpart VALUES (repeat('123456789', 4004));
214
- SELECT pg_column_compression(f1) FROM cmpart1;
215
- pg_column_compression
216
- -----------------------
217
- lz4
218
- (1 row)
219
-
220
- SELECT pg_column_compression(f1) FROM cmpart2;
221
- pg_column_compression
222
- -----------------------
223
- pglz
224
- (1 row)
225
-
226
115
-- test compression with inheritance
227
- CREATE TABLE cminh() INHERITS(cmdata, cmdata1); -- error
228
- NOTICE: merging multiple inherited definitions of column "f1"
229
- ERROR: column "f1" has a compression method conflict
230
- DETAIL: pglz versus lz4
231
- CREATE TABLE cminh(f1 TEXT COMPRESSION lz4) INHERITS(cmdata); -- error
232
- NOTICE: merging column "f1" with inherited definition
233
- ERROR: column "f1" has a compression method conflict
234
- DETAIL: pglz versus lz4
235
116
CREATE TABLE cmdata3(f1 text);
236
117
CREATE TABLE cminh() INHERITS (cmdata, cmdata3);
237
118
NOTICE: merging multiple inherited definitions of column "f1"
238
119
-- test default_toast_compression GUC
120
+ -- suppress machine-dependent details
121
+ \set VERBOSITY terse
239
122
SET default_toast_compression = '';
240
123
ERROR: invalid value for parameter "default_toast_compression": ""
241
- HINT: Available values: pglz, lz4.
242
124
SET default_toast_compression = 'I do not exist compression';
243
125
ERROR: invalid value for parameter "default_toast_compression": "I do not exist compression"
244
- HINT: Available values: pglz, lz4.
245
- SET default_toast_compression = 'lz4';
246
126
SET default_toast_compression = 'pglz';
247
- -- test alter compression method
248
- ALTER TABLE cmdata ALTER COLUMN f1 SET COMPRESSION lz4;
249
- INSERT INTO cmdata VALUES (repeat('123456789', 4004));
250
- \d+ cmdata
251
- Table "public.cmdata"
252
- Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
253
- --------+------+-----------+----------+---------+----------+-------------+--------------+-------------
254
- f1 | text | | | | extended | lz4 | |
255
- Indexes:
256
- "idx" btree (f1)
257
- Child tables: cminh
258
-
259
- SELECT pg_column_compression(f1) FROM cmdata;
260
- pg_column_compression
261
- -----------------------
262
- pglz
263
- lz4
264
- (2 rows)
265
-
127
+ \set VERBOSITY default
266
128
ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION default;
267
129
\d+ cmdata2
268
- Table "public .cmdata2"
130
+ Table "pglz .cmdata2"
269
131
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
270
132
--------+-------------------+-----------+----------+---------+---------+-------------+--------------+-------------
271
133
f1 | character varying | | | | plain | | |
272
134
273
- -- test alter compression method for materialized views
274
- ALTER MATERIALIZED VIEW compressmv ALTER COLUMN x SET COMPRESSION lz4;
275
- \d+ compressmv
276
- Materialized view "public.compressmv"
277
- Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
278
- --------+------+-----------+----------+---------+----------+-------------+--------------+-------------
279
- x | text | | | | extended | lz4 | |
280
- View definition:
281
- SELECT f1 AS x
282
- FROM cmdata1;
283
-
284
- -- test alter compression method for partitioned tables
285
- ALTER TABLE cmpart1 ALTER COLUMN f1 SET COMPRESSION pglz;
286
- ALTER TABLE cmpart2 ALTER COLUMN f1 SET COMPRESSION lz4;
287
- -- new data should be compressed with the current compression method
288
- INSERT INTO cmpart VALUES (repeat('123456789', 1004));
289
- INSERT INTO cmpart VALUES (repeat('123456789', 4004));
290
- SELECT pg_column_compression(f1) FROM cmpart1;
291
- pg_column_compression
292
- -----------------------
293
- lz4
294
- pglz
295
- (2 rows)
296
-
297
- SELECT pg_column_compression(f1) FROM cmpart2;
298
- pg_column_compression
299
- -----------------------
300
- pglz
301
- lz4
302
- (2 rows)
303
-
135
+ DROP TABLE cmdata2;
304
136
-- VACUUM FULL does not recompress
305
137
SELECT pg_column_compression(f1) FROM cmdata;
306
138
pg_column_compression
307
139
-----------------------
308
140
pglz
309
- lz4
310
- (2 rows)
141
+ (1 row)
311
142
312
143
VACUUM FULL cmdata;
313
144
SELECT pg_column_compression(f1) FROM cmdata;
314
145
pg_column_compression
315
146
-----------------------
316
147
pglz
317
- lz4
318
- (2 rows)
148
+ (1 row)
319
149
320
- -- test expression index
321
- DROP TABLE cmdata2;
322
- CREATE TABLE cmdata2 (f1 TEXT COMPRESSION pglz, f2 TEXT COMPRESSION lz4);
323
- CREATE UNIQUE INDEX idx1 ON cmdata2 ((f1 || f2));
324
- INSERT INTO cmdata2 VALUES((SELECT array_agg(fipshash(g::TEXT))::TEXT FROM
325
- generate_series(1, 50) g), VERSION());
326
150
-- check data is ok
327
151
SELECT length(f1) FROM cmdata;
328
152
length
329
153
--------
330
154
10000
331
- 36036
332
- (2 rows)
333
-
334
- SELECT length(f1) FROM cmdata1;
335
- length
336
- --------
337
- 10040
338
- 12449
339
- (2 rows)
155
+ (1 row)
340
156
341
157
SELECT length(f1) FROM cmmove1;
342
158
length
343
159
--------
344
160
10000
345
161
(1 row)
346
162
347
- SELECT length(f1) FROM cmmove2;
348
- length
349
- --------
350
- 10040
351
- (1 row)
352
-
353
- SELECT length(f1) FROM cmmove3;
354
- length
355
- --------
356
- 10000
357
- 10040
358
- (2 rows)
359
-
360
163
CREATE TABLE badcompresstbl (a text COMPRESSION I_Do_Not_Exist_Compression); -- fails
361
164
ERROR: invalid compression method "i_do_not_exist_compression"
362
165
CREATE TABLE badcompresstbl (a text);