@@ -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
@@ -178,7 +175,7 @@ Function | Returns | Description
178
175
` 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.
179
176
` pgv_free() ` | ` void ` | Removes all packages and variables.
180
177
` 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.
182
179
183
180
Note that ** pgv_stats()** works only with the PostgreSQL 9.6 and newer.
184
181
@@ -188,19 +185,17 @@ It is easy to use functions to work with scalar variables:
188
185
189
186
``` sql
190
187
SELECT pgv_set(' vars' , ' int1' , 101 );
191
- SELECT pgv_set(' vars' , ' int2 ' , 102 );
188
+ SELECT pgv_set(' vars' , ' text1 ' , ' text variable ' :: text );
192
189
193
190
SELECT pgv_get(' vars' , ' int1' , NULL ::int );
194
191
pgv_get_int
195
192
-- -----------
196
193
101
197
- (1 row)
198
194
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
204
199
```
205
200
206
201
Let's assume we have a ** tab** table:
@@ -220,56 +215,49 @@ 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:
254
244
255
245
``` sql
256
246
SELECT * 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
263
252
```
264
253
265
254
And get used memory in bytes:
266
255
267
256
``` sql
268
257
SELECT * 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
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,15 +317,16 @@ 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
You can undo removal of a transactional variable by ` ROLLBACK ` , but if you remove
339
328
a whole package, all regular variables will be removed permanently:
329
+
340
330
``` sql
341
331
SELECT pgv_set(' pack' , ' var_reg' , 123 );
342
332
SELECT pgv_set(' pack' , ' var_trans' , 456 , true);
@@ -362,18 +352,17 @@ SELECT * FROM pgv_list();
362
352
(1 row)
363
353
364
354
```
355
+
365
356
If you created transactional variable once, you should use flag ` is_transactional `
366
357
every time when you want to change variable value by functions ` pgv_set() ` ,
367
358
` pgv_insert() ` and deprecated setters (i.e. ` pgv_set_int() ` ). If you try to
368
359
change this option, you'll get an error:
360
+
369
361
``` sql
370
362
SELECT pgv_insert(' pack' , ' var_record' , row(123 ::int , ' text' ::text ), true);
371
- pgv_insert
372
- -- ----------
373
-
374
- (1 row)
375
363
376
364
SELECT pgv_insert(' pack' , ' var_record' , row(456 ::int , ' another text' ::text ));
377
365
ERROR: variable " var_record" already created as TRANSACTIONAL
378
366
```
367
+
379
368
Functions ` pgv_update() ` and ` pgv_delete() ` do not require this flag.
0 commit comments