psql: Add missing punctuation in help output
[pgsql.git] / contrib / test_decoding / sql / rewrite.sql
blob62dead3a9b1da432fa3da197611a5372034e658d
1 -- predictability
2 SET synchronous_commit = on;
4 DROP TABLE IF EXISTS replication_example;
6 -- Ensure there's tables with toast datums.  To do so, we dynamically
7 -- create a function returning a large textblob.  We want tables of
8 -- different kinds: mapped catalog table, unmapped catalog table,
9 -- shared catalog table and usertable.
10 CREATE FUNCTION exec(text) returns void language plpgsql volatile
11   AS $f$
12     BEGIN
13       EXECUTE $1;
14     END;
15 $f$;
16 CREATE ROLE regress_justforcomments NOLOGIN;
18 SELECT exec(
19     format($outer$CREATE FUNCTION iamalongfunction() RETURNS TEXT IMMUTABLE LANGUAGE SQL AS $f$SELECT text %L$f$$outer$,
20            (SELECT repeat(string_agg(to_char(g.i, 'FM0000'), ''), 50) FROM generate_series(1, 500) g(i))));
21 SELECT exec(
22     format($outer$COMMENT ON FUNCTION iamalongfunction() IS %L$outer$,
23            iamalongfunction()));
24 SELECT exec(
25     format($outer$COMMENT ON ROLE REGRESS_JUSTFORCOMMENTS IS %L$outer$,
26            iamalongfunction()));
27 CREATE TABLE iamalargetable AS SELECT iamalongfunction() longfunctionoutput;
29 -- verify toast usage
30 SELECT pg_relation_size((SELECT reltoastrelid FROM pg_class WHERE oid = 'pg_proc'::regclass)) > 0;
31 SELECT pg_relation_size((SELECT reltoastrelid FROM pg_class WHERE oid = 'pg_description'::regclass)) > 0;
32 SELECT pg_relation_size((SELECT reltoastrelid FROM pg_class WHERE oid = 'pg_shdescription'::regclass)) > 0;
35 SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
36 CREATE TABLE replication_example(id SERIAL PRIMARY KEY, somedata int, text varchar(120));
37 INSERT INTO replication_example(somedata) VALUES (1);
38 SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
40 BEGIN;
41 INSERT INTO replication_example(somedata) VALUES (2);
42 ALTER TABLE replication_example ADD COLUMN testcolumn1 int;
43 INSERT INTO replication_example(somedata, testcolumn1) VALUES (3,  1);
44 COMMIT;
46 BEGIN;
47 INSERT INTO replication_example(somedata) VALUES (3);
48 ALTER TABLE replication_example ADD COLUMN testcolumn2 int;
49 INSERT INTO replication_example(somedata, testcolumn1, testcolumn2) VALUES (4,  2, 1);
50 COMMIT;
52 VACUUM FULL pg_am;
53 VACUUM FULL pg_amop;
54 VACUUM FULL pg_proc;
55 VACUUM FULL pg_opclass;
56 VACUUM FULL pg_type;
57 VACUUM FULL pg_index;
58 VACUUM FULL pg_database;
60 -- repeated rewrites that fail
61 BEGIN;
62 CLUSTER pg_class USING pg_class_oid_index;
63 CLUSTER pg_class USING pg_class_oid_index;
64 ROLLBACK;
66 -- repeated rewrites that succeed
67 BEGIN;
68 CLUSTER pg_class USING pg_class_oid_index;
69 CLUSTER pg_class USING pg_class_oid_index;
70 CLUSTER pg_class USING pg_class_oid_index;
71 COMMIT;
73  -- repeated rewrites in different transactions
74 VACUUM FULL pg_class;
75 VACUUM FULL pg_class;
77 -- reindexing of important relations / indexes
78 REINDEX TABLE pg_class;
79 REINDEX INDEX pg_class_oid_index;
80 REINDEX INDEX pg_class_tblspc_relfilenode_index;
82 INSERT INTO replication_example(somedata, testcolumn1) VALUES (5, 3);
84 BEGIN;
85 INSERT INTO replication_example(somedata, testcolumn1) VALUES (6, 4);
86 ALTER TABLE replication_example ADD COLUMN testcolumn3 int;
87 INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (7, 5, 1);
88 COMMIT;
90 -- make old files go away
91 CHECKPOINT;
93 SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
95 -- trigger repeated rewrites of a system catalog with a toast table,
96 -- that previously was buggy: 20180914021046.oi7dm4ra3ot2g2kt@alap3.anarazel.de
97 VACUUM FULL pg_proc; VACUUM FULL pg_description; VACUUM FULL pg_shdescription; VACUUM FULL iamalargetable;
98 INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (8, 6, 1);
99 VACUUM FULL pg_proc; VACUUM FULL pg_description; VACUUM FULL pg_shdescription; VACUUM FULL iamalargetable;
100 INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (9, 7, 1);
101 SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
103 SELECT pg_drop_replication_slot('regression_slot');
104 DROP TABLE IF EXISTS replication_example;
105 DROP FUNCTION iamalongfunction();
106 DROP FUNCTION exec(text);
107 DROP ROLE regress_justforcomments;