F.42. pg_variables
ÐодÑÐ»Ñ pg_variables ÑодеÑÐ¶Ð¸Ñ ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¿ÐµÑеменнÑми ÑазлиÑнÑÑ
Ñипов. СозданнÑе пеÑеменнÑе ÑÑÑеÑÑвÑÑÑ Ð² ÑеÑение ÑекÑÑего полÑзоваÑелÑÑкого ÑеанÑа.
F.42.1. УÑÑановка
РаÑÑиÑение pg_variables вклÑÑено в ÑоÑÑав Postgres Pro. УÑÑановив Postgres Pro, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE EXTENSION, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑÑ pg_variables к ÑабоÑе, ÑледÑÑÑим обÑазом:
CREATE EXTENSION pg_variables;
F.42.2. ÐÑполÑзование
ÐодÑÐ»Ñ pg_variables ÑодеÑÐ¶Ð¸Ñ ÑÑнкÑии, позволÑÑÑие ÑоздаваÑÑ Ð¿ÐµÑеменнÑе ÑкалÑÑнÑÑ
Ñипов, пеÑеменнÑе-запиÑи и пеÑеменнÑе-маÑÑивÑ, ÑиÑаÑÑ Ð¸Ñ
и ÑпÑавлÑÑÑ Ð¸Ð¼Ð¸. СинÑакÑÐ¸Ñ Ð¸ опиÑÐ°Ð½Ð¸Ñ ÑÑнкÑий пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² ÑледÑÑÑиÑ
ÑазделаÑ
:
Ð ÐодÑазделе F.42.3.1 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
Ð ÐодÑазделе F.42.3.2 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ -запиÑей.
Ð ÐодÑазделе F.42.3.3 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ -маÑÑивов.
Ð ÐодÑазделе F.42.3.4 пеÑеÑиÑлÑÑÑÑÑ ÑÑнкÑии, позволÑÑÑие ÑпÑавлÑÑÑ Ð²Ñеми пеÑеменнÑми в ÑекÑÑем ÑеанÑе.
РазобÑаннÑе пÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе найÑи в ÐодÑазделе F.42.4.
F.42.2.1. ÐÑполÑзование ÑÑанзакÑионнÑÑ Ð¿ÐµÑеменнÑÑ
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÐµÑеменнÑе ÑоздаÑÑÑÑ ÐºÐ°Ðº неÑÑанзакÑионнÑе. УÑпеÑно ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ ÑÑÑеÑÑвоваÑÑ Ð½Ð° пÑоÑÑжении вÑего ÑеанÑа, вне завиÑимоÑÑи Ð¾Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ Ð¾ÑкаÑов ÑÑанзакÑий. ÐапÑимеÑ:
SELECT pgv_set('vars', 'int1', 101);
BEGIN;
SELECT pgv_set('vars', 'int2', 102);
ROLLBACK;
SELECT * FROM pgv_list() order by package, name;
package | name | is_transactional
---------+------+------------------
vars | int1 | f
vars | int2 | fÐÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð¿ÐµÑеменнÑÑ Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой ÑÑанзакÑий и ÑоÑек ÑоÑ
ÑанениÑ, пеÑедайÑе дополниÑелÑнÑй Ñлаг is_transactional в поÑледнем паÑамеÑÑе ÑÑнкÑии, ÑоздаÑÑей пеÑеменнÑÑ:
BEGIN;
SELECT pgv_set('vars', 'trans_int', 101, true);
SAVEPOINT sp1;
SELECT pgv_set('vars', 'trans_int', 102, true);
ROLLBACK TO sp1;
COMMIT;
SELECT pgv_get('vars', 'trans_int', NULL::int);
pgv_get
---------
101ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказÑваÑÑ Ñлаг is_transactional пÑи каждом изменении знаÑÐµÐ½Ð¸Ñ ÑÑанзакÑионной пеÑеменной Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑий pgv_set() и pgv_insert(). РпÑоÑивном ÑлÑÑае пÑоизойдÑÑ Ð¾Ñибка. ÐÑÑгим ÑÑнкÑиÑм пеÑедаваÑÑ ÑÑÐ¾Ñ Ñлаг не нÑжно.
SELECT pgv_insert('pack', 'var_record', row(123::int, 'text'::text), true);
SELECT pgv_insert('pack', 'var_record', row(456::int, 'another text'::text));
ERROR: variable "var_record" already created as TRANSACTIONAL
SELECT pgv_delete('pack', 'var_record', 123::int);
ÐÑли вÑÐ·Ð¾Ð²Ñ ÑÑнкÑий pgv_free() или pgv_remove() оÑкаÑÑваÑÑÑÑ, заÑÑагиваемÑе ÑÑанзакÑионнÑе пеÑеменнÑе воÑÑÑанавливаÑÑÑÑ, в оÑлиÑие Ð¾Ñ Ð½ÐµÑÑанзакÑионнÑÑ
, коÑоÑÑе ÑдалÑÑÑÑÑ Ð½ÐµÐ¾Ð±ÑаÑимо. ÐапÑимеÑ:
SELECT pgv_set('pack', 'var_reg', 123);
SELECT pgv_set('pack', 'var_trans', 456, true);
BEGIN;
SELECT pgv_free();
ROLLBACK;
SELECT * FROM pgv_list();
package | name | is_transactional
---------+-----------+------------------
pack | var_trans | tF.42.3. ФÑнкÑии
F.42.3.1. СкалÑÑнÑе пеÑеменнÑе
СледÑÑÑие ÑÑнкÑии поддеÑживаÑÑ ÑкалÑÑнÑе пеÑеменнÑе:
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set(package text, name text, value anynonarray, is_transactional bool default false) | void |
pgv_get(package text, name text, var_type anynonarray, strict bool default true) | anynonarray |
ÐÐ»Ñ ÑÑнкÑии pgv_get() Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑнаÑала ÑоздаÑÑ Ð¿Ð°ÐºÐµÑ Ð¸ пеÑеменнÑÑ, воÑполÑзовавÑиÑÑ ÑÑнкÑией pgv_set(). ÐÑли ÑказаннÑй Ð¿Ð°ÐºÐµÑ Ð¸Ð»Ð¸ пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑÑÑеÑÑвÑÑÑ, пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ñибка:
SELECT pgv_get('vars', 'int1', NULL::int);
ERROR: unrecognized package "vars"SELECT pgv_get('vars', 'int1', NULL::int);
ERROR: unrecognized variable "int1"ФÑнкÑÐ¸Ñ pgv_get() пÑовеÑÑÐµÑ Ñип пеÑеменной. ÐÑли заданнÑй Ñип не ÑооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¿Ñ Ð¿ÐµÑеменной, вÑдаÑÑÑÑ Ð¾Ñибка:
SELECT pgv_get('vars', 'int1', NULL::text);
ERROR: variable "int1" requires "integer" valueF.42.3.2. ÐапиÑи
СледÑÑÑие ÑÑнкÑии поддеÑживаÑÑ Ð½Ð°Ð±Ð¾ÑÑ Ð¿ÐµÑеменнÑÑ Ñипа запиÑÑ.
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ | ÐпиÑание |
|---|---|---|
pgv_insert(package text, name text, r record, is_transactional bool default false) | void | ÐÑÑавлÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² Ð½Ð°Ð±Ð¾Ñ Ð¿ÐµÑеменнÑÑ
Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ пакеÑа. ÐÑли Ð¿Ð°ÐºÐµÑ Ð¸Ð»Ð¸ пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑÑÑеÑÑвÑÑÑ, они ÑоздаÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки. ÐеÑвÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð·Ð°Ð¿Ð¸Ñи r â пеÑвиÑнÑй клÑÑ. ÐÑли запиÑÑ Ñ Ñаким же пеÑвиÑнÑм клÑÑом Ñже ÑÑÑеÑÑвÑÐµÑ Ð¸Ð»Ð¸ ÑÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñ Ð¿ÐµÑеменнÑÑ
Ð¸Ð¼ÐµÐµÑ Ð´ÑÑгÑÑ ÑÑÑÑкÑÑÑÑ, вÑдаÑÑÑÑ Ð¾Ñибка. |
pgv_update(package text, name text, r record) | boolean | ÐзменÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ñ ÑооÑвеÑÑÑвÑÑÑим пеÑвиÑнÑм клÑÑом (он задаÑÑÑÑ Ð² пеÑвом ÑÑолбÑе r). ÐозвÑаÑÐ°ÐµÑ true, еÑли запиÑÑ Ð±Ñла найдена. ÐÑли ÑÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñ Ð¿ÐµÑеменнÑÑ
Ð¸Ð¼ÐµÐµÑ Ð´ÑÑгÑÑ ÑÑÑÑкÑÑÑÑ, вÑдаÑÑÑÑ Ð¾Ñибка. |
pgv_delete(package text, name text, value anynonarray) | boolean | УдалÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ñ ÑооÑвеÑÑÑвÑÑÑим пеÑвиÑнÑм клÑÑом (он задаÑÑÑÑ Ð² пеÑвом ÑÑолбÑе r). ÐозвÑаÑÐ°ÐµÑ true, еÑли запиÑÑ Ð±Ñла найдена. |
pgv_select(package text, name text) | set of records | ÐозвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸Ñи из набоÑа пеÑеменнÑÑ . |
pgv_select(package text, name text, value anynonarray) | record | ÐозвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸Ñи из набоÑа пеÑеменнÑÑ
Ñ ÑооÑвеÑÑÑвÑÑÑими пеÑвиÑнÑми клÑÑами (пеÑвиÑнÑй клÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð² пеÑвом ÑÑолбÑе r). |
pgv_select(package text, name text, value anyarray) | set of records | ÐозвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸Ñи из набоÑа пеÑеменнÑÑ
Ñ ÑооÑвеÑÑÑвÑÑÑими пеÑвиÑнÑми клÑÑами (пеÑвиÑнÑй клÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð² пеÑвом ÑÑолбÑе r). |
ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑий pgv_update(), pgv_delete() и pgv_select() Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑнаÑала ÑоздаÑÑ Ð¿Ð°ÐºÐµÑ Ð¸ пеÑеменнÑÑ, воÑполÑзовавÑиÑÑ ÑÑнкÑией pgv_insert(). Тип пеÑеменной и Ñип запиÑи Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми, инаÑе вÑдаÑÑÑÑ Ð¾Ñибка.
F.42.3.3. ÐаÑÑивÑ
СледÑÑÑие ÑÑнкÑии поддеÑживаÑÑ Ð¿ÐµÑеменнÑе-маÑÑивÑ:
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set(package text, name text, value anyarray, is_transactional bool default false) | void |
pgv_get(package text, name text, var_type anyarray, strict bool default true) | anyarray |
ÐнÑÑÑÑкÑии по иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÐ¸Ñ ÑÑнкÑий ÑовпадаÑÑ Ñ Ð¿ÑиведÑннÑми в ÐодÑазделе F.42.3.1 Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
F.42.3.4. ФÑнкÑии Ñазного назнаÑениÑ
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ | ÐпиÑание |
|---|---|---|
pgv_exists(package text, name text) | bool | ÐозвÑаÑÐ°ÐµÑ true, еÑли ÑÑÑеÑÑвÑÐµÑ Ð¿Ð°ÐºÐµÑ Ð¸ пеÑеменнаÑ. |
pgv_exists(package text) | bool | ÐозвÑаÑÐ°ÐµÑ true, еÑли ÑÑÑеÑÑвÑÐµÑ ÑказаннÑй пакеÑ. |
pgv_remove(package text, name text) | void | УдалÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм именем. УказаннÑй Ð¿Ð°ÐºÐµÑ Ð¸ пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑÑеÑÑвоваÑÑ, инаÑе вÑдаÑÑÑÑ Ð¾Ñибка. |
pgv_remove(package text) | void | УдалÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй Ð¿Ð°ÐºÐµÑ Ð¸ вÑе его пеÑеменнÑе. УказаннÑй Ð¿Ð°ÐºÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑÑÑеÑÑвоваÑÑ, инаÑе вÑдаÑÑÑÑ Ð¾Ñибка. |
pgv_free() | void | УдалÑÐµÑ Ð²Ñе пакеÑÑ Ð¸ пеÑеменнÑе. |
pgv_list() | table(package text, name text, is_transactional bool) | ÐÑÐ²Ð¾Ð´Ð¸Ñ ÑпиÑок вÑÐµÑ ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¿ÐµÑеменнÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑооÑвеÑÑÑвÑÑÑего пакеÑа и пÑизнаком Ñого, ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑанзакÑионнаÑ. |
pgv_stats() | table(package text, allocated_memory bigint) | ÐозвÑаÑÐ°ÐµÑ ÑпиÑок ÑозданнÑÑ
пакеÑов и обÑÑм памÑÑи, иÑполÑзÑемÑй пеÑеменнÑми, в байÑаÑ
. ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑанзакÑионнÑе пеÑеменнÑе, в ÑÑÐ¾Ñ ÑпиÑок Ñакже вклÑÑаÑÑÑÑ Ð²Ñе ÑдалÑннÑе пакеÑÑ, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ROLLBACK. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко в Postgres Pro веÑÑии 9.6 и новее. |
F.42.3.5. УÑÑаÑевÑие ÑÑнкÑии
F.42.3.5.1. ЦелоÑиÑленнÑе пеÑеменнÑе
СледÑÑÑие ÑÑнкÑии ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими. ÐÑполÑзÑйÑе вмеÑÑо Ð½Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set_int(package text, name text, value int, is_transactional bool default false) | void |
pgv_get_int(package text, name text, strict bool default true) | int |
F.42.3.5.2. ТекÑÑовÑе пеÑеменнÑе
СледÑÑÑие ÑÑнкÑии ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими. ÐÑполÑзÑйÑе вмеÑÑо Ð½Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set_text(package text, name text, value text, is_transactional bool default false) | void |
pgv_get_text(package text, name text, strict bool default true) | text |
F.42.3.5.3. ЧиÑловÑе пеÑеменнÑе
СледÑÑÑие ÑÑнкÑии ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими. ÐÑполÑзÑйÑе вмеÑÑо Ð½Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set_numeric(package text, name text, value numeric, is_transactional bool default false) | void |
pgv_get_numeric(package text, name text, strict bool default true) | numeric |
F.42.3.5.4. ÐеÑеменнÑе даÑÑ/вÑемени
СледÑÑÑие ÑÑнкÑии ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими. ÐÑполÑзÑйÑе вмеÑÑо Ð½Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set_timestamp(package text, name text, value timestamp, is_transactional bool default false) | void |
pgv_get_timestamp(package text, name text, strict bool default true) | timestamp |
F.42.3.5.5. ÐеÑеменнÑе даÑÑ/вÑемени Ñ ÑаÑовÑм поÑÑом
СледÑÑÑие ÑÑнкÑии ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими. ÐÑполÑзÑйÑе вмеÑÑо Ð½Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set_timestamptz(package text, name text, value timestamptz, is_transactional bool default false) | void |
pgv_get_timestamptz(package text, name text, strict bool default true) | timestamptz |
F.42.3.5.6. ÐеÑеменнÑе даÑÑ
СледÑÑÑие ÑÑнкÑии ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими. ÐÑполÑзÑйÑе вмеÑÑо Ð½Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set_date(package text, name text, value date, is_transactional bool default false) | void |
pgv_get_date(package text, name text, strict bool default true) | date |
F.42.3.5.7. ÐеÑеменнÑе Jsonb
СледÑÑÑие ÑÑнкÑии ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими. ÐÑполÑзÑйÑе вмеÑÑо Ð½Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ |
|---|---|
pgv_set_jsonb(package text, name text, value jsonb, is_transactional bool default false) | void |
pgv_get_jsonb(package text, name text, strict bool default true) | jsonb |
F.42.4. ÐÑимеÑÑ
ÐпÑеделение ÑкалÑÑнÑÑ
пеÑеменнÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии pgv_set() и полÑÑение иÑ
знаÑений Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ pgv_get():
SELECT pgv_set('vars', 'int1', 101);
SELECT pgv_set('vars', 'int2', 102);
SELECT pgv_set('vars', 'text1', 'text variable'::text);
SELECT pgv_get('vars', 'int1', NULL::int);
pgv_get
-------------
101
SELECT pgv_get('vars', 'int2', NULL::int);
pgv_get
-------------
102
SELECT pgv_get('vars', 'text1', NULL::text);
pgv_get
---------------
text variableРпÑедположении, ÑÑо Ñоздана ÑледÑÑÑÐ°Ñ ÑаблиÑа tab, ÑаÑÑмоÑÑиÑе неÑколÑко пÑимеÑов Ñ Ð¿ÐµÑеменнÑми-запиÑÑми:
CREATE TABLE tab (id int, t varchar); INSERT INTO tab VALUES (0, 'str00'), (1, 'str11');
ÐÐ»Ñ ÑабоÑÑ Ñ Ð¿ÐµÑеменнÑми-запиÑÑми можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии:
SELECT pgv_insert('vars', 'r1', tab) FROM tab;
SELECT pgv_select('vars', 'r1');
pgv_select
------------
(1,str11)
(0,str00)
SELECT pgv_select('vars', 'r1', 1);
pgv_select
------------
(1,str11)
SELECT pgv_select('vars', 'r1', 0);
pgv_select
------------
(0,str00)
SELECT pgv_select('vars', 'r1', ARRAY[1, 0]);
pgv_select
------------
(1,str11)
(0,str00)
SELECT pgv_delete('vars', 'r1', 1);
SELECT pgv_select('vars', 'r1');
pgv_select
------------
(0,str00)ÐÑоанализиÑÑйÑе поведение ÑÑанзакÑионной пеÑеменной var_text пÑи изменении до и поÑле ÑоÑки ÑоÑ
ÑанениÑ:
SELECT pgv_set('pack', 'var_text', 'before transaction block'::text, true);
BEGIN;
SELECT pgv_set('pack', 'var_text', 'before savepoint'::text, true);
SAVEPOINT sp1;
SELECT pgv_set('pack', 'var_text', 'savepoint sp1'::text, true);
SAVEPOINT sp2;
SELECT pgv_set('pack', 'var_text', 'savepoint sp2'::text, true);
RELEASE sp2;
SELECT pgv_get('pack', 'var_text', NULL::text);
pgv_get
---------------
savepoint sp2
ROLLBACK TO sp1;
SELECT pgv_get('pack', 'var_text', NULL::text);
pgv_get
------------------
before savepoint
ROLLBACK;
SELECT pgv_get('pack', 'var_text', NULL::text);
pgv_get
--------------------------
before transaction blockÐÑли Ð²Ñ ÑоздадиÑе ÑÑанзакÑионнÑÑ Ð¿ÐµÑеменнÑÑ Ð¿Ð¾Ñле команд BEGIN или SAVEPOINT и заÑем пÑоизойдÑÑ Ð¾ÑÐºÐ°Ñ Ðº пÑедÑдÑÑÐµÐ¼Ñ ÑоÑÑоÑниÑ, ÑÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð±ÑÐ´ÐµÑ Ñдалена:
BEGIN;
SAVEPOINT sp1;
SAVEPOINT sp2;
SELECT pgv_set('pack', 'var_int', 122, true);
RELEASE SAVEPOINT sp2;
SELECT pgv_get('pack', 'var_int', NULL::int);
pgv_get
---------
122
ROLLBACK TO sp1;
SELECT pgv_get('pack','var_int', NULL::int);
ERROR: unrecognized variable "var_int"
COMMIT;ÐÑоÑмоÑÑеÑÑ Ð¸Ð¼ÐµÑÑиеÑÑ Ð¿Ð°ÐºÐµÑÑ Ð¸ пеÑеменнÑе:
SELECT * FROM pgv_list() ORDER BY package, name; package | name | is_transactional ---------+----------+------------------ pack | var_text | t vars | int1 | f vars | int2 | f vars | r1 | f vars | text1 | f
ÐолÑÑение обÑÑма памÑÑи, занÑÑой пеÑеменнÑми, в байÑÐ°Ñ :
SELECT * FROM pgv_stats() ORDER BY package; package | allocated_memory ---------+------------------ pack | 16384 vars | 32768
Удаление избÑаннÑÑ Ð¿ÐµÑеменнÑÑ Ð¸Ð»Ð¸ пакеÑов:
SELECT pgv_remove('vars', 'int1');
SELECT pgv_remove('vars');Удаление вÑÐµÑ Ð¿Ð°ÐºÐµÑов и пеÑеменнÑÑ :
SELECT pgv_free();
F.42.5. ÐвÑоÑÑ
Postgres Professional, ÐоÑква, РоÑÑиÑ