@akal/pg-conformance 0.0.0-stage → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,452 @@
1
+ [
2
+ {
3
+ "id": "identity_opts",
4
+ "sql": "CREATE TABLE h (id bigint GENERATED ALWAYS AS IDENTITY (INCREMENT 10 START 100 MINVALUE 50 MAXVALUE 9999 CYCLE), n text);",
5
+ "minPgVersion": 14
6
+ },
7
+ {
8
+ "id": "identity_desc",
9
+ "sql": "CREATE TABLE h (id integer GENERATED BY DEFAULT AS IDENTITY (INCREMENT -1 START -5), n text);",
10
+ "minPgVersion": 14
11
+ },
12
+ {
13
+ "id": "generated_expr",
14
+ "sql": "CREATE TABLE h (w numeric(10,2), q int, total numeric(12,2) GENERATED ALWAYS AS (w * q) STORED);",
15
+ "minPgVersion": 14
16
+ },
17
+ {
18
+ "id": "array_multidim",
19
+ "sql": "CREATE TABLE h (id int, grid integer[][], tags text[3]);",
20
+ "minPgVersion": 14
21
+ },
22
+ {
23
+ "id": "collation_col",
24
+ "sql": "CREATE TABLE h (id int, name text COLLATE \"C\", other text COLLATE \"POSIX\");",
25
+ "minPgVersion": 14
26
+ },
27
+ {
28
+ "id": "exclusion_gist",
29
+ "sql": "CREATE EXTENSION IF NOT EXISTS btree_gist; CREATE TABLE h (id int, room int, during tsrange, EXCLUDE USING gist (room WITH =, during WITH &&));",
30
+ "minPgVersion": 14
31
+ },
32
+ {
33
+ "id": "partial_index",
34
+ "sql": "CREATE TABLE h (id int, status text, ts timestamptz); CREATE INDEX h_i ON h (ts DESC NULLS LAST) WHERE status = 'open';",
35
+ "minPgVersion": 14
36
+ },
37
+ {
38
+ "id": "expr_index_opclass",
39
+ "sql": "CREATE TABLE h (id int, email text); CREATE INDEX h_i ON h (lower(email) text_pattern_ops);",
40
+ "minPgVersion": 14
41
+ },
42
+ {
43
+ "id": "include_index",
44
+ "sql": "CREATE TABLE h (id int PRIMARY KEY, a int, b int); CREATE UNIQUE INDEX h_i ON h (a) INCLUDE (b);",
45
+ "minPgVersion": 14
46
+ },
47
+ {
48
+ "id": "nulls_not_distinct",
49
+ "sql": "CREATE TABLE h (id int, a int UNIQUE NULLS NOT DISTINCT);",
50
+ "minPgVersion": 15
51
+ },
52
+ {
53
+ "id": "fk_set_null_cols",
54
+ "sql": "CREATE TABLE p (a int, b int, PRIMARY KEY (a,b)); CREATE TABLE h (a int, b int, FOREIGN KEY (a,b) REFERENCES p(a,b) ON DELETE SET NULL (b));",
55
+ "minPgVersion": 15
56
+ },
57
+ {
58
+ "id": "fk_match_full",
59
+ "sql": "CREATE TABLE p (a int, b int, PRIMARY KEY (a,b)); CREATE TABLE h (a int, b int, FOREIGN KEY (a,b) REFERENCES p(a,b) MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT);",
60
+ "minPgVersion": 14
61
+ },
62
+ {
63
+ "id": "deferrable_con",
64
+ "sql": "CREATE TABLE h (id int, u int, CONSTRAINT h_u UNIQUE (u) DEFERRABLE INITIALLY DEFERRED);",
65
+ "minPgVersion": 14
66
+ },
67
+ {
68
+ "id": "check_not_valid",
69
+ "sql": "CREATE TABLE h (id int, n int); ALTER TABLE h ADD CONSTRAINT h_c CHECK (n > 0) NOT VALID;",
70
+ "minPgVersion": 14
71
+ },
72
+ {
73
+ "id": "check_multi_col",
74
+ "sql": "CREATE TABLE h (lo int, hi int, CONSTRAINT h_range CHECK (lo < hi AND lo >= 0));",
75
+ "minPgVersion": 14
76
+ },
77
+ {
78
+ "id": "storage_params",
79
+ "sql": "CREATE TABLE h (id int, n text) WITH (fillfactor = 70, autovacuum_vacuum_scale_factor = 0.05);",
80
+ "minPgVersion": 14
81
+ },
82
+ {
83
+ "id": "column_storage",
84
+ "sql": "CREATE TABLE h (id int, big text); ALTER TABLE h ALTER COLUMN big SET STORAGE EXTERNAL;",
85
+ "minPgVersion": 14
86
+ },
87
+ {
88
+ "id": "column_compression",
89
+ "sql": "CREATE TABLE h (id int, big text COMPRESSION lz4);",
90
+ "minPgVersion": 14
91
+ },
92
+ {
93
+ "id": "unlogged_table",
94
+ "sql": "CREATE UNLOGGED TABLE h (id int PRIMARY KEY, n text);",
95
+ "minPgVersion": 14
96
+ },
97
+ {
98
+ "id": "part_range_multi",
99
+ "sql": "CREATE TABLE h (id int, d date, r text) PARTITION BY RANGE (d); CREATE TABLE h_2024 PARTITION OF h FOR VALUES FROM ('2024-01-01') TO ('2025-01-01'); CREATE TABLE h_def PARTITION OF h DEFAULT;",
100
+ "minPgVersion": 14
101
+ },
102
+ {
103
+ "id": "part_list_subpart",
104
+ "sql": "CREATE TABLE h (id int, r text, s text) PARTITION BY LIST (r); CREATE TABLE h_eu PARTITION OF h FOR VALUES IN ('eu') PARTITION BY LIST (s); CREATE TABLE h_eu_a PARTITION OF h_eu FOR VALUES IN ('a');",
105
+ "minPgVersion": 14
106
+ },
107
+ {
108
+ "id": "part_hash",
109
+ "sql": "CREATE TABLE h (id int, n text) PARTITION BY HASH (id); CREATE TABLE h_0 PARTITION OF h FOR VALUES WITH (MODULUS 4, REMAINDER 0);",
110
+ "minPgVersion": 14
111
+ },
112
+ {
113
+ "id": "part_expr_key",
114
+ "sql": "CREATE TABLE h (id int, ts timestamp) PARTITION BY RANGE (date_trunc('month', ts)); CREATE TABLE h_a PARTITION OF h FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');",
115
+ "minPgVersion": 14
116
+ },
117
+ {
118
+ "id": "inherits",
119
+ "sql": "CREATE TABLE base (id int, n text); CREATE TABLE h (extra int) INHERITS (base);",
120
+ "minPgVersion": 14
121
+ },
122
+ {
123
+ "id": "domain_constraints",
124
+ "sql": "CREATE DOMAIN posint AS integer NOT NULL DEFAULT 1 CHECK (VALUE > 0); CREATE TABLE h (id int, v posint);",
125
+ "minPgVersion": 14
126
+ },
127
+ {
128
+ "id": "composite_type",
129
+ "sql": "CREATE TYPE addr AS (street text, city text, zip text); CREATE TABLE h (id int, a addr);",
130
+ "minPgVersion": 14
131
+ },
132
+ {
133
+ "id": "enum_col_default",
134
+ "sql": "CREATE TYPE mood AS ENUM ('sad','ok','happy'); CREATE TABLE h (id int, m mood DEFAULT 'ok' NOT NULL);",
135
+ "minPgVersion": 14
136
+ },
137
+ {
138
+ "id": "rls_policies",
139
+ "sql": "CREATE TABLE h (id int, owner text); ALTER TABLE h ENABLE ROW LEVEL SECURITY; ALTER TABLE h FORCE ROW LEVEL SECURITY; CREATE POLICY h_sel ON h FOR SELECT USING (owner = current_user); CREATE POLICY h_ins ON h FOR INSERT WITH CHECK (owner = current_user);",
140
+ "minPgVersion": 14
141
+ },
142
+ {
143
+ "id": "comments",
144
+ "sql": "CREATE TABLE h (id int, n text); COMMENT ON TABLE h IS 'a table'; COMMENT ON COLUMN h.n IS 'a column';",
145
+ "minPgVersion": 14
146
+ },
147
+ {
148
+ "id": "seq_owned_options",
149
+ "sql": "CREATE SEQUENCE s START 100 INCREMENT 5 MINVALUE 100 MAXVALUE 100000 CACHE 20 CYCLE; CREATE TABLE h (id bigint DEFAULT nextval('s'), n text); ALTER SEQUENCE s OWNED BY h.id;",
150
+ "minPgVersion": 14
151
+ },
152
+ {
153
+ "id": "matview_index",
154
+ "sql": "CREATE TABLE b (id int, n int); CREATE MATERIALIZED VIEW h AS SELECT id, sum(n) AS t FROM b GROUP BY id; CREATE UNIQUE INDEX h_i ON h (id);",
155
+ "minPgVersion": 14
156
+ },
157
+ {
158
+ "id": "view_with_options",
159
+ "sql": "CREATE TABLE b (id int, n int); CREATE VIEW h WITH (security_barrier = true) AS SELECT id, n FROM b WHERE n > 0 WITH CASCADED CHECK OPTION;",
160
+ "minPgVersion": 14
161
+ },
162
+ {
163
+ "id": "func_setof_default",
164
+ "sql": "CREATE FUNCTION h(a int DEFAULT 5, VARIADIC rest int[] DEFAULT '{}') RETURNS SETOF int LANGUAGE sql STABLE STRICT PARALLEL SAFE AS $$ SELECT a $$;",
165
+ "minPgVersion": 14
166
+ },
167
+ {
168
+ "id": "trigger_when_cols",
169
+ "sql": "CREATE TABLE h (id int, a int, b int); CREATE FUNCTION h_f() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RETURN NEW; END $$; CREATE TRIGGER h_t AFTER UPDATE OF a, b ON h FOR EACH ROW WHEN (OLD.a IS DISTINCT FROM NEW.a) EXECUTE FUNCTION h_f();",
170
+ "minPgVersion": 14
171
+ },
172
+ {
173
+ "id": "fk_self_referencing",
174
+ "minPgVersion": 14,
175
+ "sql": "CREATE TABLE h (id int PRIMARY KEY, parent_id int REFERENCES h(id) ON DELETE CASCADE);"
176
+ },
177
+ {
178
+ "id": "fk_circular_deferred",
179
+ "minPgVersion": 14,
180
+ "sql": "CREATE TABLE a (id int PRIMARY KEY, b_id int); CREATE TABLE b (id int PRIMARY KEY, a_id int REFERENCES a(id) DEFERRABLE INITIALLY DEFERRED); ALTER TABLE a ADD CONSTRAINT a_b_fk FOREIGN KEY (b_id) REFERENCES b(id) DEFERRABLE INITIALLY DEFERRED;"
181
+ },
182
+ {
183
+ "id": "fk_on_update_cascade",
184
+ "minPgVersion": 14,
185
+ "sql": "CREATE TABLE p (id int PRIMARY KEY); CREATE TABLE h (id int, p_id int REFERENCES p(id) ON UPDATE CASCADE ON DELETE SET DEFAULT);"
186
+ },
187
+ {
188
+ "id": "index_brin",
189
+ "minPgVersion": 14,
190
+ "sql": "CREATE TABLE h (id int, ts timestamptz); CREATE INDEX h_i ON h USING brin (ts) WITH (pages_per_range = 64);"
191
+ },
192
+ {
193
+ "id": "index_gin_jsonb",
194
+ "minPgVersion": 14,
195
+ "sql": "CREATE TABLE h (id int, doc jsonb); CREATE INDEX h_i ON h USING gin (doc jsonb_path_ops);"
196
+ },
197
+ {
198
+ "id": "index_hash",
199
+ "minPgVersion": 14,
200
+ "sql": "CREATE TABLE h (id int, tag text); CREATE INDEX h_i ON h USING hash (tag);"
201
+ },
202
+ {
203
+ "id": "index_multicolumn_order",
204
+ "minPgVersion": 14,
205
+ "sql": "CREATE TABLE h (a int, b text, c date); CREATE INDEX h_i ON h (a DESC NULLS FIRST, b ASC NULLS LAST, c DESC);"
206
+ },
207
+ {
208
+ "id": "index_partial_expression",
209
+ "minPgVersion": 14,
210
+ "sql": "CREATE TABLE h (id int, email text, active boolean); CREATE UNIQUE INDEX h_i ON h (lower(email)) WHERE active;"
211
+ },
212
+ {
213
+ "id": "index_collation",
214
+ "minPgVersion": 14,
215
+ "sql": "CREATE TABLE h (id int, s text); CREATE INDEX h_i ON h (s COLLATE \"C\" text_pattern_ops);"
216
+ },
217
+ {
218
+ "id": "index_fillfactor",
219
+ "minPgVersion": 14,
220
+ "sql": "CREATE TABLE h (id int); CREATE INDEX h_i ON h (id) WITH (fillfactor = 70, deduplicate_items = off);"
221
+ },
222
+ {
223
+ "id": "type_interval_qualifier",
224
+ "minPgVersion": 14,
225
+ "sql": "CREATE TABLE h (a interval DAY TO SECOND(3), b interval YEAR TO MONTH, c interval HOUR);"
226
+ },
227
+ {
228
+ "id": "type_numeric_edges",
229
+ "minPgVersion": 14,
230
+ "sql": "CREATE TABLE h (a numeric(1000,500), b numeric, c decimal(10), d real, e double precision);"
231
+ },
232
+ {
233
+ "id": "type_time_precision",
234
+ "minPgVersion": 14,
235
+ "sql": "CREATE TABLE h (a time(3), b time(6) with time zone, c timestamp(0), d timestamptz(4));"
236
+ },
237
+ {
238
+ "id": "type_bit_varbit",
239
+ "minPgVersion": 14,
240
+ "sql": "CREATE TABLE h (a bit(8), b bit varying(64), c bit varying);"
241
+ },
242
+ {
243
+ "id": "type_ranges",
244
+ "minPgVersion": 14,
245
+ "sql": "CREATE TABLE h (a int4range, b tstzrange, c numrange, d daterange);"
246
+ },
247
+ {
248
+ "id": "type_multirange",
249
+ "minPgVersion": 14,
250
+ "sql": "CREATE TABLE h (a int4multirange, b tstzmultirange);"
251
+ },
252
+ {
253
+ "id": "type_array_of_enum",
254
+ "minPgVersion": 14,
255
+ "sql": "CREATE TYPE mood AS ENUM ('a','b'); CREATE TABLE h (id int, m mood[], n mood[][]);"
256
+ },
257
+ {
258
+ "id": "type_array_of_domain",
259
+ "minPgVersion": 14,
260
+ "sql": "CREATE DOMAIN pos AS integer CHECK (VALUE > 0); CREATE TABLE h (id int, v pos[]);"
261
+ },
262
+ {
263
+ "id": "domain_over_domain",
264
+ "minPgVersion": 14,
265
+ "sql": "CREATE DOMAIN base_pos AS integer CHECK (VALUE > 0); CREATE DOMAIN small_pos AS base_pos CHECK (VALUE < 100); CREATE TABLE h (v small_pos);"
266
+ },
267
+ {
268
+ "id": "domain_multiple_checks",
269
+ "minPgVersion": 14,
270
+ "sql": "CREATE DOMAIN code AS text CONSTRAINT code_len CHECK (length(VALUE) = 3) CONSTRAINT code_upper CHECK (VALUE = upper(VALUE)); CREATE TABLE h (c code);"
271
+ },
272
+ {
273
+ "id": "composite_nested",
274
+ "minPgVersion": 14,
275
+ "sql": "CREATE TYPE inner_t AS (a int, b text); CREATE TYPE outer_t AS (x inner_t, y int); CREATE TABLE h (v outer_t);"
276
+ },
277
+ {
278
+ "id": "serial_variants",
279
+ "minPgVersion": 14,
280
+ "sql": "CREATE TABLE h (a smallserial, b serial, c bigserial, d text);"
281
+ },
282
+ {
283
+ "id": "identity_smallint",
284
+ "minPgVersion": 14,
285
+ "sql": "CREATE TABLE h (id smallint GENERATED BY DEFAULT AS IDENTITY (MINVALUE -100 MAXVALUE 100 CYCLE), n text);"
286
+ },
287
+ {
288
+ "id": "generated_multi_column",
289
+ "minPgVersion": 14,
290
+ "sql": "CREATE TABLE h (a int, b int, c int, total int GENERATED ALWAYS AS (a + b * c) STORED, label text GENERATED ALWAYS AS (a::text || '-' || b::text) STORED);"
291
+ },
292
+ {
293
+ "id": "part_range_multicolumn",
294
+ "minPgVersion": 14,
295
+ "sql": "CREATE TABLE h (a int, b int, v text) PARTITION BY RANGE (a, b); CREATE TABLE h_1 PARTITION OF h FOR VALUES FROM (0, 0) TO (10, 10); CREATE TABLE h_2 PARTITION OF h FOR VALUES FROM (10, 10) TO (MAXVALUE, MAXVALUE);"
296
+ },
297
+ {
298
+ "id": "part_index_propagated",
299
+ "minPgVersion": 14,
300
+ "sql": "CREATE TABLE h (id int, d date NOT NULL, PRIMARY KEY (d, id)) PARTITION BY RANGE (d); CREATE TABLE h_a PARTITION OF h FOR VALUES FROM ('2024-01-01') TO ('2025-01-01'); CREATE INDEX h_i ON h (id);"
301
+ },
302
+ {
303
+ "id": "part_attach_after_create",
304
+ "minPgVersion": 14,
305
+ "sql": "CREATE TABLE h (id int, d date) PARTITION BY RANGE (d); CREATE TABLE h_a (id int, d date); ALTER TABLE h ATTACH PARTITION h_a FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');"
306
+ },
307
+ {
308
+ "id": "part_child_own_constraint",
309
+ "minPgVersion": 14,
310
+ "sql": "CREATE TABLE h (id int, d date, n int) PARTITION BY RANGE (d); CREATE TABLE h_a PARTITION OF h FOR VALUES FROM ('2024-01-01') TO ('2025-01-01'); ALTER TABLE h_a ADD CONSTRAINT h_a_n CHECK (n > 0);"
311
+ },
312
+ {
313
+ "id": "part_fk_to_partitioned",
314
+ "minPgVersion": 14,
315
+ "sql": "CREATE TABLE p (id int, d date NOT NULL, PRIMARY KEY (id, d)) PARTITION BY RANGE (d); CREATE TABLE p_a PARTITION OF p FOR VALUES FROM ('2024-01-01') TO ('2025-01-01'); CREATE TABLE h (id int, d date, FOREIGN KEY (id, d) REFERENCES p(id, d));"
316
+ },
317
+ {
318
+ "id": "view_recursive_cte",
319
+ "minPgVersion": 14,
320
+ "sql": "CREATE TABLE t (id int, parent int); CREATE RECURSIVE VIEW h (id, depth) AS SELECT id, 0 FROM t WHERE parent IS NULL UNION ALL SELECT t.id, h.depth + 1 FROM t JOIN h ON t.parent = h.id;"
321
+ },
322
+ {
323
+ "id": "view_column_aliases",
324
+ "minPgVersion": 14,
325
+ "sql": "CREATE TABLE t (a int, b text); CREATE VIEW h (renamed_a, renamed_b) AS SELECT a, b FROM t;"
326
+ },
327
+ {
328
+ "id": "view_security_invoker",
329
+ "minPgVersion": 15,
330
+ "sql": "CREATE TABLE t (a int); CREATE VIEW h WITH (security_invoker = true) AS SELECT a FROM t;"
331
+ },
332
+ {
333
+ "id": "matview_no_data",
334
+ "minPgVersion": 14,
335
+ "sql": "CREATE TABLE t (a int); CREATE MATERIALIZED VIEW h AS SELECT a FROM t WITH NO DATA;"
336
+ },
337
+ {
338
+ "id": "fn_overloads",
339
+ "minPgVersion": 14,
340
+ "sql": "CREATE FUNCTION h(a int) RETURNS int LANGUAGE sql IMMUTABLE AS $$ SELECT a $$; CREATE FUNCTION h(a text) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT a $$; CREATE FUNCTION h(a int, b int) RETURNS int LANGUAGE sql IMMUTABLE AS $$ SELECT a + b $$;"
341
+ },
342
+ {
343
+ "id": "fn_out_params",
344
+ "minPgVersion": 14,
345
+ "sql": "CREATE FUNCTION h(IN a int, OUT doubled int, OUT tripled int) LANGUAGE sql AS $$ SELECT a * 2, a * 3 $$;"
346
+ },
347
+ {
348
+ "id": "fn_security_definer_search_path",
349
+ "minPgVersion": 14,
350
+ "sql": "CREATE FUNCTION h() RETURNS int LANGUAGE sql SECURITY DEFINER SET search_path = pg_catalog, public COST 500 AS $$ SELECT 1 $$;"
351
+ },
352
+ {
353
+ "id": "fn_plpgsql_exception",
354
+ "minPgVersion": 14,
355
+ "sql": "CREATE FUNCTION h(a int) RETURNS int LANGUAGE plpgsql AS $$ BEGIN RETURN 10 / a; EXCEPTION WHEN division_by_zero THEN RETURN 0; END $$;"
356
+ },
357
+ {
358
+ "id": "fn_returns_setof_composite",
359
+ "minPgVersion": 14,
360
+ "sql": "CREATE TYPE row_t AS (a int, b text); CREATE FUNCTION h() RETURNS SETOF row_t LANGUAGE sql STABLE ROWS 100 AS $$ SELECT 1, 'x'::text $$;"
361
+ },
362
+ {
363
+ "id": "procedure_with_args",
364
+ "minPgVersion": 14,
365
+ "sql": "CREATE TABLE t (a int); CREATE PROCEDURE h(v int) LANGUAGE plpgsql AS $$ BEGIN INSERT INTO t VALUES (v); END $$;"
366
+ },
367
+ {
368
+ "id": "trigger_statement_level",
369
+ "minPgVersion": 14,
370
+ "sql": "CREATE TABLE h (a int); CREATE FUNCTION h_f() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RETURN NULL; END $$; CREATE TRIGGER h_t AFTER INSERT OR UPDATE OR DELETE ON h FOR EACH STATEMENT EXECUTE FUNCTION h_f();"
371
+ },
372
+ {
373
+ "id": "trigger_instead_of_view",
374
+ "minPgVersion": 14,
375
+ "sql": "CREATE TABLE t (a int); CREATE VIEW h AS SELECT a FROM t; CREATE FUNCTION h_f() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RETURN NEW; END $$; CREATE TRIGGER h_t INSTEAD OF INSERT ON h FOR EACH ROW EXECUTE FUNCTION h_f();"
376
+ },
377
+ {
378
+ "id": "trigger_truncate",
379
+ "minPgVersion": 14,
380
+ "sql": "CREATE TABLE h (a int); CREATE FUNCTION h_f() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RETURN NULL; END $$; CREATE TRIGGER h_t AFTER TRUNCATE ON h FOR EACH STATEMENT EXECUTE FUNCTION h_f();"
381
+ },
382
+ {
383
+ "id": "trigger_constraint",
384
+ "minPgVersion": 14,
385
+ "sql": "CREATE TABLE h (a int); CREATE FUNCTION h_f() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RETURN NEW; END $$; CREATE CONSTRAINT TRIGGER h_t AFTER INSERT ON h DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION h_f();"
386
+ },
387
+ {
388
+ "id": "policy_restrictive",
389
+ "minPgVersion": 14,
390
+ "sql": "CREATE TABLE h (id int, owner text); ALTER TABLE h ENABLE ROW LEVEL SECURITY; CREATE POLICY h_p1 ON h AS PERMISSIVE FOR ALL USING (true); CREATE POLICY h_p2 ON h AS RESTRICTIVE FOR SELECT USING (owner = current_user);"
391
+ },
392
+ {
393
+ "id": "policy_per_command",
394
+ "minPgVersion": 14,
395
+ "sql": "CREATE TABLE h (id int, n int); ALTER TABLE h ENABLE ROW LEVEL SECURITY; CREATE POLICY h_s ON h FOR SELECT USING (n > 0); CREATE POLICY h_i ON h FOR INSERT WITH CHECK (n > 0); CREATE POLICY h_u ON h FOR UPDATE USING (n > 0) WITH CHECK (n < 100); CREATE POLICY h_d ON h FOR DELETE USING (n < 0);"
396
+ },
397
+ {
398
+ "id": "table_like_including_all",
399
+ "minPgVersion": 14,
400
+ "sql": "CREATE TABLE src (id int PRIMARY KEY, n text DEFAULT 'x' NOT NULL, CONSTRAINT src_ck CHECK (n <> '')); CREATE INDEX src_i ON src (n); CREATE TABLE h (LIKE src INCLUDING ALL);"
401
+ },
402
+ {
403
+ "id": "table_of_composite_type",
404
+ "minPgVersion": 14,
405
+ "sql": "CREATE TYPE h_t AS (a int, b text); CREATE TABLE h OF h_t (PRIMARY KEY (a));"
406
+ },
407
+ {
408
+ "id": "column_storage_variants",
409
+ "minPgVersion": 14,
410
+ "sql": "CREATE TABLE h (a text, b text, c text, d int); ALTER TABLE h ALTER COLUMN a SET STORAGE PLAIN; ALTER TABLE h ALTER COLUMN b SET STORAGE MAIN; ALTER TABLE h ALTER COLUMN c SET STORAGE EXTENDED;"
411
+ },
412
+ {
413
+ "id": "table_toast_options",
414
+ "minPgVersion": 14,
415
+ "sql": "CREATE TABLE h (id int, big text) WITH (toast_tuple_target = 4096, parallel_workers = 4, autovacuum_enabled = false);"
416
+ },
417
+ {
418
+ "id": "sequence_as_smallint",
419
+ "minPgVersion": 14,
420
+ "sql": "CREATE SEQUENCE h AS smallint START 5 INCREMENT 2 MAXVALUE 300 CACHE 10;"
421
+ },
422
+ {
423
+ "id": "multiple_comments",
424
+ "minPgVersion": 14,
425
+ "sql": "CREATE TABLE h (id int, n text); CREATE INDEX h_i ON h (n); CREATE VIEW h_v AS SELECT id FROM h; CREATE FUNCTION h_f() RETURNS int LANGUAGE sql AS $$ SELECT 1 $$; COMMENT ON TABLE h IS 'the table'; COMMENT ON COLUMN h.n IS 'the column'; COMMENT ON INDEX h_i IS 'the index'; COMMENT ON VIEW h_v IS 'the view'; COMMENT ON FUNCTION h_f() IS 'the function';"
426
+ },
427
+ {
428
+ "id": "check_constraint_complex",
429
+ "minPgVersion": 14,
430
+ "sql": "CREATE TABLE h (a int, b int, c text, CONSTRAINT h_ck CHECK ((a > 0 AND b > a) OR (c IS NOT NULL AND length(c) BETWEEN 1 AND 10)));"
431
+ },
432
+ {
433
+ "id": "unique_multicolumn_nulls",
434
+ "minPgVersion": 15,
435
+ "sql": "CREATE TABLE h (a int, b int, CONSTRAINT h_u UNIQUE NULLS NOT DISTINCT (a, b));"
436
+ },
437
+ {
438
+ "id": "exclusion_with_where",
439
+ "minPgVersion": 14,
440
+ "sql": "CREATE EXTENSION IF NOT EXISTS btree_gist; CREATE TABLE h (id int, room int, during tsrange, cancelled boolean DEFAULT false, EXCLUDE USING gist (room WITH =, during WITH &&) WHERE (NOT cancelled));"
441
+ },
442
+ {
443
+ "id": "inherits_multiple_parents",
444
+ "minPgVersion": 14,
445
+ "sql": "CREATE TABLE p1 (a int, shared text); CREATE TABLE p2 (b int, shared text); CREATE TABLE h (c int) INHERITS (p1, p2);"
446
+ },
447
+ {
448
+ "id": "identity_and_generated_mixed",
449
+ "minPgVersion": 14,
450
+ "sql": "CREATE TABLE h (id bigint GENERATED ALWAYS AS IDENTITY (INCREMENT 3), base int NOT NULL, derived int GENERATED ALWAYS AS (base * 2) STORED, note text DEFAULT current_user);"
451
+ }
452
+ ]