Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2cb6b6c

Browse files
Merge branch 'add_xact_support' of github.com:CherkashinSergey/pg_variables into add_xact_support
2 parentscc26887 +b24c793 commit2cb6b6c

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+
SELECTSELECT 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 createdas TRANSACTIONAL
378366
```
367+
379368
Functions`pgv_update()` and`pgv_delete()` do not require this flag.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp