@@ -22,7 +22,6 @@ SELECT * FROM pgv_list() order by package, name;
22
22
-- -------+------+------------------
23
23
vars | int1 | f
24
24
vars | int2 | f
25
- (2 rows)
26
25
```
27
26
28
27
But if variable created with flag ** is_transactional** :
@@ -34,11 +33,9 @@ SELECT pgv_set('vars', 'trans_int', 102, true);
34
33
ROLLBACK TO sp1;
35
34
COMMIT ;
36
35
SELECT pgv_get(' vars' , ' trans_int' , NULL ::int );
37
-
38
36
pgv_get
39
37
-- -------
40
38
101
41
- (1 row)
42
39
```
43
40
44
41
## License
@@ -194,13 +191,11 @@ SELECT pgv_get('vars', 'int1', NULL::int);
194
191
pgv_get_int
195
192
-- -----------
196
193
101
197
- (1 row)
198
194
199
195
SELECT SELECT pgv_get(' vars' , ' text1' , NULL ::text );
200
196
pgv_get
201
197
-- -------------
202
198
text variable
203
- (1 row)
204
199
```
205
200
206
201
Let's assume we have a ** tab** table:
@@ -220,34 +215,29 @@ SELECT pgv_select('vars', 'r1');
220
215
-- ----------
221
216
(1 ,str11)
222
217
(0 ,str00)
223
- (2 rows)
224
218
225
219
SELECT pgv_select(' vars' , ' r1' , 1 );
226
220
pgv_select
227
221
-- ----------
228
222
(1 ,str11)
229
- (1 row)
230
223
231
224
SELECT pgv_select(' vars' , ' r1' , 0 );
232
225
pgv_select
233
226
-- ----------
234
227
(0 ,str00)
235
- (1 row)
236
228
237
229
SELECT pgv_select(' vars' , ' r1' , ARRAY[1 , 0 ]);
238
230
pgv_select
239
231
-- ----------
240
232
(1 ,str11)
241
233
(0 ,str00)
242
- (2 rows)
243
234
244
235
SELECT pgv_delete(' vars' , ' r1' , 1 );
245
236
246
237
SELECT pgv_select(' vars' , ' r1' );
247
238
pgv_select
248
239
-- ----------
249
240
(0 ,str00)
250
- (1 row)
251
241
```
252
242
253
243
You can list packages and variables:
@@ -259,7 +249,6 @@ SELECT * FROM pgv_list() order by package, name;
259
249
vars | int1 | f
260
250
vars | r1 | f
261
251
vars | text1 | f
262
- (3 rows)
263
252
```
264
253
265
254
And get used memory in bytes:
@@ -269,7 +258,6 @@ SELECT * FROM pgv_stats() order by package;
269
258
package | allocated_memory
270
259
-- -------+------------------
271
260
vars | 32768
272
- (1 row)
273
261
```
274
262
275
263
You can delete variables or whole packages:
@@ -288,6 +276,7 @@ If you want variables with support of transactions and savepoints, you should
288
276
add flag ` is_transactional = true ` as the last argument in functions ` pgv_set() `
289
277
or ` pgv_insert() ` .
290
278
Following use cases describe behavior of transactional variables:
279
+
291
280
``` sql
292
281
SELECT pgv_set(' pack' , ' var_text' , ' before transaction block' ::text , true);
293
282
BEGIN ;
@@ -307,17 +296,17 @@ SELECT pgv_get('pack', 'var_text', NULL::text);
307
296
pgv_get
308
297
-- ----------------
309
298
before savepoint
310
- (1 row)
311
299
312
300
ROLLBACK ;
313
301
SELECT pgv_get(' pack' , ' var_text' , NULL ::text );
314
302
pgv_get
315
303
-- ------------------------
316
304
before transaction block
317
-
318
305
```
306
+
319
307
If you create variable after ` BEGIN ` or ` SAVEPOINT ` statements and than rollback
320
308
to previous state - variable will not be exist:
309
+
321
310
``` sql
322
311
BEGIN ;
323
312
SAVEPOINT sp1;
@@ -328,14 +317,15 @@ SELECT pgv_get('pack', 'var_int', NULL::int);
328
317
pgv_get
329
318
-- -------
330
319
122
331
- (1 row)
332
320
333
321
ROLLBACK TO sp1;
334
322
SELECT pgv_get(' pack' ,' var_int' , NULL ::int );
335
323
ERROR: unrecognized variable " var_int"
336
324
COMMIT ;
337
325
```
326
+
338
327
Also you cannot undo removing variable by ` ROLLBACK ` :
328
+
339
329
``` sql
340
330
SELECT pgv_set(' pack' , ' var_int' , 122 , true);
341
331
BEGIN ;
@@ -344,18 +334,17 @@ ROLLBACK;
344
334
SELECT pgv_get(' pack' , ' var_int' , NULL ::int );
345
335
ERROR: unrecognized package " pack"
346
336
```
337
+
347
338
If you created transactional variable once, you should use flag ` is_transactional `
348
339
every time when you want to change variable value by functions ` pgv_set() ` ,
349
340
` pgv_insert() ` and deprecated setters (i.e. ` pgv_set_int() ` ). If you try to
350
341
change this option, you'll get an error:
342
+
351
343
``` sql
352
344
SELECT pgv_insert(' pack' , ' var_record' , row(123 ::int , ' text' ::text ), true);
353
- pgv_insert
354
- -- ----------
355
-
356
- (1 row)
357
345
358
346
SELECT pgv_insert(' pack' , ' var_record' , row(456 ::int , ' another text' ::text ));
359
347
ERROR: variable " var_record" already created as TRANSACTIONAL
360
348
```
349
+
361
350
Functions ` pgv_update() ` and ` pgv_delete() ` do not require this flag.
0 commit comments