Skip to content

Commit b24c793

Browse files
Merge branch 'master' into add_xact_support
2 parents 0c7a850 + 9d3e182 commit b24c793

File tree

2 files changed

+23
-33
lines changed

2 files changed

+23
-33
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
*.gcda
33
*.gcov
44
*.so
5+
*.o

README.md

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2827
But if variable created with flag **is_transactional**:
@@ -34,11 +33,9 @@ SELECT pgv_set('vars', 'trans_int', 102, true);
3433
ROLLBACK TO sp1;
3534
COMMIT;
3635
SELECT pgv_get('vars', 'trans_int', NULL::int);
37-
3836
pgv_get
3937
---------
4038
101
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

183180
Note 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
190187
SELECT pgv_set('vars', 'int1', 101);
191-
SELECT pgv_set('vars', 'int2', 102);
188+
SELECT pgv_set('vars', 'text1', 'text variable'::text);
192189

193190
SELECT pgv_get('vars', 'int1', NULL::int);
194191
pgv_get_int
195192
-------------
196193
101
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

206201
Let'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

225219
SELECT pgv_select('vars', 'r1', 1);
226220
pgv_select
227221
------------
228222
(1,str11)
229-
(1 row)
230223

231224
SELECT pgv_select('vars', 'r1', 0);
232225
pgv_select
233226
------------
234227
(0,str00)
235-
(1 row)
236228

237229
SELECT pgv_select('vars', 'r1', ARRAY[1, 0]);
238230
pgv_select
239231
------------
240232
(1,str11)
241233
(0,str00)
242-
(2 rows)
243234

244235
SELECT pgv_delete('vars', 'r1', 1);
245236

246237
SELECT pgv_select('vars', 'r1');
247238
pgv_select
248239
------------
249240
(0,str00)
250-
(1 row)
251241
```
252242

253243
You can list packages and variables:
254244

255245
```sql
256246
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
263252
```
264253

265254
And get used memory in bytes:
266255

267256
```sql
268257
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
273261
```
274262

275263
You can delete variables or whole packages:
@@ -288,6 +276,7 @@ If you want variables with support of transactions and savepoints, you should
288276
add flag `is_transactional = true` as the last argument in functions `pgv_set()`
289277
or `pgv_insert()`.
290278
Following use cases describe behavior of transactional variables:
279+
291280
```sql
292281
SELECT pgv_set('pack', 'var_text', 'before transaction block'::text, true);
293282
BEGIN;
@@ -307,17 +296,17 @@ SELECT pgv_get('pack', 'var_text', NULL::text);
307296
pgv_get
308297
------------------
309298
before savepoint
310-
(1 row)
311299

312300
ROLLBACK;
313301
SELECT pgv_get('pack', 'var_text', NULL::text);
314302
pgv_get
315303
--------------------------
316304
before transaction block
317-
318305
```
306+
319307
If you create variable after `BEGIN` or `SAVEPOINT` statements and than rollback
320308
to previous state - variable will not be exist:
309+
321310
```sql
322311
BEGIN;
323312
SAVEPOINT sp1;
@@ -328,15 +317,16 @@ SELECT pgv_get('pack', 'var_int', NULL::int);
328317
pgv_get
329318
---------
330319
122
331-
(1 row)
332320

333321
ROLLBACK TO sp1;
334322
SELECT pgv_get('pack','var_int', NULL::int);
335323
ERROR: unrecognized variable "var_int"
336324
COMMIT;
337325
```
326+
338327
You can undo removal of a transactional variable by `ROLLBACK`, but if you remove
339328
a whole package, all regular variables will be removed permanently:
329+
340330
```sql
341331
SELECT pgv_set('pack', 'var_reg', 123);
342332
SELECT pgv_set('pack', 'var_trans', 456, true);
@@ -362,18 +352,17 @@ SELECT * FROM pgv_list();
362352
(1 row)
363353

364354
```
355+
365356
If you created transactional variable once, you should use flag `is_transactional`
366357
every 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
368359
change this option, you'll get an error:
360+
369361
```sql
370362
SELECT pgv_insert('pack', 'var_record', row(123::int, 'text'::text), true);
371-
pgv_insert
372-
------------
373-
374-
(1 row)
375363

376364
SELECT pgv_insert('pack', 'var_record', row(456::int, 'another text'::text));
377365
ERROR: variable "var_record" already created as TRANSACTIONAL
378366
```
367+
379368
Functions `pgv_update()` and `pgv_delete()` do not require this flag.

0 commit comments

Comments
 (0)