@@ -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-- -------
4038101
41- (1 row)
4239```
4340
4441##License
@@ -178,7 +175,7 @@ Function | Returns | Description
178175` pgv_remove(package text) ` |` void ` | Removes the package and all package variables with the corresponding name. Required package must exists, otherwise the error will be raised.
179176` pgv_free() ` |` void ` | Removes all packages and variables.
180177` pgv_list() ` |` table(package text, name text, is_transactional bool) ` | Returns set of records of assigned packages and variables.
181- ` pgv_stats() ` |` table(package text,used_memory bigint) ` | Returns list of assigned packages and used memory in bytes.
178+ ` pgv_stats() ` |` table(package text,allocated_memory bigint) ` | Returns list of assigned packages and used memory in bytes.
182179
183180Note that** pgv_stats()** works only with the PostgreSQL 9.6 and newer.
184181
@@ -188,19 +185,17 @@ It is easy to use functions to work with scalar variables:
188185
189186``` sql
190187SELECT pgv_set(' vars' ,' int1' ,101 );
191- SELECT pgv_set(' vars' ,' int2 ' ,102 );
188+ SELECT pgv_set(' vars' ,' text1 ' ,' text variable ' :: text );
192189
193190SELECT pgv_get(' vars' ,' int1' ,NULL ::int );
194191 pgv_get_int
195192-- -----------
196193101
197- (1 row)
198194
199- SELECT pgv_get(' vars' ,' int2' ,NULL ::int );
200- pgv_get_int
201- -- -----------
202- 102
203- (1 row)
195+ SELECT SELECT pgv_get(' vars' ,' text1' ,NULL ::text );
196+ pgv_get
197+ -- -------------
198+ text variable
204199```
205200
206201Let's assume we have a** tab** table:
@@ -220,56 +215,49 @@ 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:
254244
255245``` sql
256246SELECT * FROM pgv_list()order by package, name;
257- package | name | is_transactional
258- -- -------+------+------------------
259- vars | int1 | f
260- vars | int2 | f
261- vars | r1 | f
262- (3 rows)
247+ package | name | is_transactional
248+ -- -------+-------+------------------
249+ vars | int1 | f
250+ vars | r1 | f
251+ vars | text1 | f
263252```
264253
265254And get used memory in bytes:
266255
267256``` sql
268257SELECT * FROM pgv_stats()order by package;
269- package | used_memory
270- -- -------+-------------
271- vars |16736
272- (1 row)
258+ package | allocated_memory
259+ -- -------+------------------
260+ vars |32768
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,15 +317,16 @@ SELECT pgv_get('pack', 'var_int', NULL::int);
328317pgv_get
329318-- -------
330319122
331- (1 row)
332320
333321ROLLBACK TO sp1;
334322SELECT pgv_get(' pack' ,' var_int' ,NULL ::int );
335323ERROR: unrecognized variable" var_int"
336324COMMIT ;
337325```
326+
338327You can undo removal of a transactional variable by` ROLLBACK ` , but if you remove
339328a whole package, all regular variables will be removed permanently:
329+
340330``` sql
341331SELECT pgv_set(' pack' ,' var_reg' ,123 );
342332SELECT pgv_set(' pack' ,' var_trans' ,456 , true);
@@ -362,18 +352,17 @@ SELECT * FROM pgv_list();
362352(1 row)
363353
364354```
355+
365356If you created transactional variable once, you should use flag` is_transactional `
366357every time when you want to change variable value by functions` pgv_set() ` ,
367358` pgv_insert() ` and deprecated setters (i.e.` pgv_set_int() ` ). If you try to
368359change this option, you'll get an error:
360+
369361``` sql
370362SELECT pgv_insert(' pack' ,' var_record' , row(123 ::int ,' text' ::text ), true);
371- pgv_insert
372- -- ----------
373-
374- (1 row)
375363
376364SELECT pgv_insert(' pack' ,' var_record' , row(456 ::int ,' another text' ::text ));
377365ERROR: variable" var_record" already createdas TRANSACTIONAL
378366```
367+
379368Functions` pgv_update() ` and` pgv_delete() ` do not require this flag.