@@ -22,7 +22,6 @@ SELECT * FROM pgv_list() order by package, name;
2222-- -------+------+------------------
2323 vars | int1 | f
2424 vars | int2 | f
25- (2 rows)
2625```
2726
2827But if variable created with flag ** is_transactional** :
@@ -34,11 +33,9 @@ SELECT pgv_set('vars', 'trans_int', 102, true);
3433ROLLBACK TO sp1;
3534COMMIT ;
3635SELECT pgv_get(' vars' , ' trans_int' , NULL ::int );
37-
3836 pgv_get
3937-- -------
4038 101
41- (1 row)
4239```
4340
4441## License
@@ -194,13 +191,11 @@ SELECT pgv_get('vars', 'int1', NULL::int);
194191 pgv_get_int
195192-- -----------
196193 101
197- (1 row)
198194
199195SELECT SELECT pgv_get(' vars' , ' text1' , NULL ::text );
200196 pgv_get
201197-- -------------
202198 text variable
203- (1 row)
204199```
205200
206201Let's assume we have a ** tab** table:
@@ -220,34 +215,29 @@ SELECT pgv_select('vars', 'r1');
220215-- ----------
221216 (1 ,str11)
222217 (0 ,str00)
223- (2 rows)
224218
225219SELECT pgv_select(' vars' , ' r1' , 1 );
226220 pgv_select
227221-- ----------
228222 (1 ,str11)
229- (1 row)
230223
231224SELECT pgv_select(' vars' , ' r1' , 0 );
232225 pgv_select
233226-- ----------
234227 (0 ,str00)
235- (1 row)
236228
237229SELECT pgv_select(' vars' , ' r1' , ARRAY[1 , 0 ]);
238230 pgv_select
239231-- ----------
240232 (1 ,str11)
241233 (0 ,str00)
242- (2 rows)
243234
244235SELECT pgv_delete(' vars' , ' r1' , 1 );
245236
246237SELECT pgv_select(' vars' , ' r1' );
247238 pgv_select
248239-- ----------
249240 (0 ,str00)
250- (1 row)
251241```
252242
253243You can list packages and variables:
@@ -259,7 +249,6 @@ SELECT * FROM pgv_list() order by package, name;
259249 vars | int1 | f
260250 vars | r1 | f
261251 vars | text1 | f
262- (3 rows)
263252```
264253
265254And get used memory in bytes:
@@ -269,7 +258,6 @@ SELECT * FROM pgv_stats() order by package;
269258 package | allocated_memory
270259-- -------+------------------
271260 vars | 32768
272- (1 row)
273261```
274262
275263You can delete variables or whole packages:
@@ -288,6 +276,7 @@ If you want variables with support of transactions and savepoints, you should
288276add flag ` is_transactional = true ` as the last argument in functions ` pgv_set() `
289277or ` pgv_insert() ` .
290278Following use cases describe behavior of transactional variables:
279+
291280``` sql
292281SELECT pgv_set(' pack' , ' var_text' , ' before transaction block' ::text , true);
293282BEGIN ;
@@ -307,17 +296,17 @@ SELECT pgv_get('pack', 'var_text', NULL::text);
307296 pgv_get
308297-- ----------------
309298 before savepoint
310- (1 row)
311299
312300ROLLBACK ;
313301SELECT pgv_get(' pack' , ' var_text' , NULL ::text );
314302 pgv_get
315303-- ------------------------
316304 before transaction block
317-
318305```
306+
319307If you create variable after ` BEGIN ` or ` SAVEPOINT ` statements and than rollback
320308to previous state - variable will not be exist:
309+
321310``` sql
322311BEGIN ;
323312SAVEPOINT sp1;
@@ -328,14 +317,15 @@ SELECT pgv_get('pack', 'var_int', NULL::int);
328317pgv_get
329318-- -------
330319 122
331- (1 row)
332320
333321ROLLBACK TO sp1;
334322SELECT pgv_get(' pack' ,' var_int' , NULL ::int );
335323ERROR: unrecognized variable " var_int"
336324COMMIT ;
337325```
326+
338327Also you cannot undo removing variable by ` ROLLBACK ` :
328+
339329``` sql
340330SELECT pgv_set(' pack' , ' var_int' , 122 , true);
341331BEGIN ;
@@ -344,18 +334,17 @@ ROLLBACK;
344334SELECT pgv_get(' pack' , ' var_int' , NULL ::int );
345335ERROR: unrecognized package " pack"
346336```
337+
347338If you created transactional variable once, you should use flag ` is_transactional `
348339every time when you want to change variable value by functions ` pgv_set() ` ,
349340` pgv_insert() ` and deprecated setters (i.e. ` pgv_set_int() ` ). If you try to
350341change this option, you'll get an error:
342+
351343``` sql
352344SELECT pgv_insert(' pack' , ' var_record' , row(123 ::int , ' text' ::text ), true);
353- pgv_insert
354- -- ----------
355-
356- (1 row)
357345
358346SELECT pgv_insert(' pack' , ' var_record' , row(456 ::int , ' another text' ::text ));
359347ERROR: variable " var_record" already created as TRANSACTIONAL
360348```
349+
361350Functions ` pgv_update() ` and ` pgv_delete() ` do not require this flag.
0 commit comments