Fix xslt_process() to ensure that it inserts a NULL terminator after the
[PostgreSQL.git] / src / test / regress / expected / prepared_xacts.out
blob292962ab7b3d7f04eb363cea5138079f2ed6d6a4
1 --
2 -- PREPARED TRANSACTIONS (two-phase commit)
3 --
4 -- We can't readily test persistence of prepared xacts within the
5 -- regression script framework, unfortunately.  Note that a crash
6 -- isn't really needed ... stopping and starting the postmaster would
7 -- be enough, but we can't even do that here.
8 -- create a simple table that we'll use in the tests
9 CREATE TABLE pxtest1 (foobar VARCHAR(10));
10 INSERT INTO pxtest1 VALUES ('aaa');
11 -- Test PREPARE TRANSACTION
12 BEGIN;
13 UPDATE pxtest1 SET foobar = 'bbb' WHERE foobar = 'aaa';
14 SELECT * FROM pxtest1;
15  foobar 
16 --------
17  bbb
18 (1 row)
20 PREPARE TRANSACTION 'foo1';
21 SELECT * FROM pxtest1;
22  foobar 
23 --------
24  aaa
25 (1 row)
27 -- Test pg_prepared_xacts system view
28 SELECT gid FROM pg_prepared_xacts;
29  gid  
30 ------
31  foo1
32 (1 row)
34 -- Test ROLLBACK PREPARED
35 ROLLBACK PREPARED 'foo1';
36 SELECT * FROM pxtest1;
37  foobar 
38 --------
39  aaa
40 (1 row)
42 SELECT gid FROM pg_prepared_xacts;
43  gid 
44 -----
45 (0 rows)
47 -- Test COMMIT PREPARED
48 BEGIN;
49 INSERT INTO pxtest1 VALUES ('ddd');
50 SELECT * FROM pxtest1;
51  foobar 
52 --------
53  aaa
54  ddd
55 (2 rows)
57 PREPARE TRANSACTION 'foo2';
58 SELECT * FROM pxtest1;
59  foobar 
60 --------
61  aaa
62 (1 row)
64 COMMIT PREPARED 'foo2';
65 SELECT * FROM pxtest1;
66  foobar 
67 --------
68  aaa
69  ddd
70 (2 rows)
72 -- Test duplicate gids
73 BEGIN;
74 UPDATE pxtest1 SET foobar = 'eee' WHERE foobar = 'ddd';
75 SELECT * FROM pxtest1;
76  foobar 
77 --------
78  aaa
79  eee
80 (2 rows)
82 PREPARE TRANSACTION 'foo3';
83 SELECT gid FROM pg_prepared_xacts;
84  gid  
85 ------
86  foo3
87 (1 row)
89 BEGIN;
90 INSERT INTO pxtest1 VALUES ('fff');
91 SELECT * FROM pxtest1;
92  foobar 
93 --------
94  aaa
95  ddd
96  fff
97 (3 rows)
99 -- This should fail, because the gid foo3 is already in use
100 PREPARE TRANSACTION 'foo3';
101 ERROR:  transaction identifier "foo3" is already in use
102 SELECT * FROM pxtest1;
103  foobar 
104 --------
105  aaa
106  ddd
107 (2 rows)
109 ROLLBACK PREPARED 'foo3';
110 SELECT * FROM pxtest1;
111  foobar 
112 --------
113  aaa
114  ddd
115 (2 rows)
117 -- Clean up
118 DROP TABLE pxtest1;
119 -- Test subtransactions
120 BEGIN;
121   CREATE TABLE pxtest2 (a int);
122   INSERT INTO pxtest2 VALUES (1);
123   SAVEPOINT a;
124     INSERT INTO pxtest2 VALUES (2);
125   ROLLBACK TO a;
126   SAVEPOINT b;
127   INSERT INTO pxtest2 VALUES (3);
128 PREPARE TRANSACTION 'regress-one';
129 CREATE TABLE pxtest3(fff int);
130 -- Test shared invalidation
131 BEGIN;
132   DROP TABLE pxtest3;
133   CREATE TABLE pxtest4 (a int);
134   INSERT INTO pxtest4 VALUES (1);
135   INSERT INTO pxtest4 VALUES (2);
136   DECLARE foo CURSOR FOR SELECT * FROM pxtest4;
137   -- Fetch 1 tuple, keeping the cursor open
138   FETCH 1 FROM foo;
139  a 
142 (1 row)
144 PREPARE TRANSACTION 'regress-two';
145 -- No such cursor
146 FETCH 1 FROM foo;
147 ERROR:  cursor "foo" does not exist
148 -- Table doesn't exist, the creation hasn't been committed yet
149 SELECT * FROM pxtest2;
150 ERROR:  relation "pxtest2" does not exist
151 LINE 1: SELECT * FROM pxtest2;
152                       ^
153 -- There should be two prepared transactions
154 SELECT gid FROM pg_prepared_xacts;
155      gid     
156 -------------
157  regress-one
158  regress-two
159 (2 rows)
161 -- pxtest3 should be locked because of the pending DROP
162 set statement_timeout to 2000;
163 SELECT * FROM pxtest3;
164 ERROR:  canceling statement due to statement timeout
165 reset statement_timeout;
166 -- Disconnect, we will continue testing in a different backend
167 \c -
168 -- There should still be two prepared transactions
169 SELECT gid FROM pg_prepared_xacts;
170      gid     
171 -------------
172  regress-one
173  regress-two
174 (2 rows)
176 -- pxtest3 should still be locked because of the pending DROP
177 set statement_timeout to 2000;
178 SELECT * FROM pxtest3;
179 ERROR:  canceling statement due to statement timeout
180 reset statement_timeout;
181 -- Commit table creation
182 COMMIT PREPARED 'regress-one';
183 \d pxtest2
184     Table "public.pxtest2"
185  Column |  Type   | Modifiers 
186 --------+---------+-----------
187  a      | integer | 
189 SELECT * FROM pxtest2;
190  a 
194 (2 rows)
196 -- There should be one prepared transaction
197 SELECT gid FROM pg_prepared_xacts;
198      gid     
199 -------------
200  regress-two
201 (1 row)
203 -- Commit table drop
204 COMMIT PREPARED 'regress-two';
205 SELECT * FROM pxtest3;
206 ERROR:  relation "pxtest3" does not exist
207 LINE 1: SELECT * FROM pxtest3;
208                       ^
209 -- There should be no prepared transactions
210 SELECT gid FROM pg_prepared_xacts;
211  gid 
212 -----
213 (0 rows)
215 -- Clean up
216 DROP TABLE pxtest2;
217 DROP TABLE pxtest3;  -- will still be there if prepared xacts are disabled
218 ERROR:  table "pxtest3" does not exist
219 DROP TABLE pxtest4;