F.45. pg_variables
ÐодÑÐ»Ñ pg_variables ÑодеÑÐ¶Ð¸Ñ ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¿ÐµÑеменнÑми ÑазлиÑнÑÑ
Ñипов. СозданнÑе пеÑеменнÑе ÑÑÑеÑÑвÑÑÑ Ð² ÑеÑение ÑекÑÑего полÑзоваÑелÑÑкого ÑеанÑа.
F.45.1. УÑÑановка
РаÑÑиÑение pg_variables вклÑÑено в ÑоÑÑав Postgres Pro. УÑÑановив Postgres Pro, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE EXTENSION, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑÑ pg_variables к ÑабоÑе, ÑледÑÑÑим обÑазом:
CREATE EXTENSION pg_variables;
F.45.2. ÐÑполÑзование
ÐодÑÐ»Ñ pg_variables ÑодеÑÐ¶Ð¸Ñ ÑÑнкÑии, позволÑÑÑие ÑоздаваÑÑ Ð¿ÐµÑеменнÑе ÑкалÑÑнÑÑ
Ñипов, пеÑеменнÑе-запиÑи и пеÑеменнÑе-маÑÑивÑ, ÑиÑаÑÑ Ð¸Ñ
и ÑпÑавлÑÑÑ Ð¸Ð¼Ð¸. СинÑакÑÐ¸Ñ Ð¸ опиÑÐ°Ð½Ð¸Ñ ÑÑнкÑий пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² ÑледÑÑÑиÑ
ÑазделаÑ
:
Ð ÐодÑазделе F.45.3.1 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
Ð ÐодÑазделе F.45.3.2 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ -коллекÑий запиÑей.
Ð ÐодÑазделе F.45.3.3 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ -маÑÑивов.
Ð ÐодÑазделе F.45.3.4 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ Ð¾Ð±ÑÐ¸Ñ Ð¿ÐµÑеменнÑÑ -коллекÑий.
Ð ÐодÑазделе F.45.3.5 опиÑÑваÑÑÑÑ ÑÑнкÑии Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ÑеÑаÑоÑов пÑи пеÑедвижении по пеÑеменнÑм-коллекÑиÑм.
Ð ÐодÑазделе F.45.3.6 пеÑеÑиÑлÑÑÑÑÑ ÑÑнкÑии, позволÑÑÑие ÑпÑавлÑÑÑ Ð²Ñеми пеÑеменнÑми в ÑекÑÑем ÑеанÑе.
РазобÑаннÑе пÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе найÑи в ÐодÑазделе F.45.5.
F.45.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.45.3. ФÑнкÑии
F.45.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.45.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, еÑли запиÑÑ Ð±Ñла найдена, или false в пÑоÑивном ÑлÑÑае. |
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.45.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.45.3.1 Ð´Ð»Ñ ÑкалÑÑнÑÑ Ð¿ÐµÑеменнÑÑ .
F.45.3.4. ÐбÑие коллекÑии
СледÑÑÑие ÑÑнкÑии поддеÑживаÑÑ Ð¾Ð±Ñие пеÑеменнÑе-коллекÑии:
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ | ÐпиÑание |
|---|---|---|
| void | УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение Ð´Ð»Ñ ÑлеменÑа Ñ ÐºÐ»ÑÑом key пеÑеменной-коллекÑии name в пакеÑе package. ÐÑли Ð¿Ð°ÐºÐµÑ Ð¸Ð»Ð¸ пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑÑÑеÑÑвÑÑÑ, они ÑоздаÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки. ÐнÑÑÑи одной коллекÑии ÑазÑеÑÐµÐ½Ñ ÑолÑко клÑÑи одного Ñипа. ÐÑгÑÐ¼ÐµÐ½Ñ key Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñипа int или text. ÐÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ ÑказаннÑм клÑÑом Ñже ÑÑÑеÑÑвÑеÑ, его знаÑение изменÑеÑÑÑ Ð½Ð° новое. ÐаÑамеÑÑ is_transactional показÑваеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ Ð½Ð¾Ð²Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑанзакÑионной, и по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение false. Таким обÑазом, еÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñже ÑÑÑеÑÑвÑеÑ, она должна бÑÑÑ ÑÑанзакÑионной/неÑÑанзакÑионной, в завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ is_transactional, в пÑоÑивном ÑлÑÑае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. ÐÑли коллекÑÐ¸Ñ Ñже ÑÑÑеÑÑвÑÐµÑ Ð¸ Ñип его знаÑÐµÐ½Ð¸Ñ Ð½Ðµ ÑооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¿Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ знаÑениÑ, Ñакже Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
| anyelement | ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение ÑлеменÑа Ñ ÐºÐ»ÑÑом key пеÑеменной-коллекÑии name в пакеÑе package. ÐÑли в ÑÑой коллекÑии Ð½ÐµÑ ÑлеменÑа Ñ ÑказаннÑм клÑÑом, возвÑаÑаеÑÑÑ NULL. ÐÑгÑÐ¼ÐµÐ½Ñ key Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñипа int или text. ÐÑли Ð¿Ð°ÐºÐµÑ Ð¸Ð»Ð¸ пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑÑÑеÑÑвÑÐµÑ Ð¸Ð»Ð¸ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑвлÑеÑÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑией, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. ÐÑгÑÐ¼ÐµÐ½Ñ val_type необÑ
одим Ð´Ð»Ñ Ð¿ÑавилÑного опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипа возвÑаÑаемого знаÑениÑ. |
| bool | ÐозвÑаÑÐ°ÐµÑ true, еÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ ÐºÐ»ÑÑом key ÑÑÑеÑÑвÑÐµÑ Ð² пеÑеменной-коллекÑии name в пакеÑе package, и >false в пÑоÑивном ÑлÑÑае. ÐÑли коллекÑÐ¸Ñ Ð¸Ð»Ð¸ пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ, Ñакже возвÑаÑаеÑÑÑ false. ÐÑгÑÐ¼ÐµÐ½Ñ key Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñипа int или text. ÐÑли ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑвлÑеÑÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑией, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
| void | УдалÑÐµÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ ÐºÐ»ÑÑом key пеÑеменной-коллекÑии name из пакеÑа package. ÐÑли в ÑÑой коллекÑии Ð½ÐµÑ ÑлеменÑа Ñ ÑказаннÑм клÑÑом, ниÑего не пÑоиÑÑ
одиÑ. ÐÑгÑÐ¼ÐµÐ½Ñ key Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñипа int или text. ÐÑли Ð¿Ð°ÐºÐµÑ Ð¸Ð»Ð¸ пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑÑÑеÑÑвÑÐµÑ Ð¸Ð»Ð¸ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ ÑвлÑеÑÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑии, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
Ðажно
ÐоллекÑии, ÑозданнÑе ÑÑнкÑиÑми pgv_set_elem() и pgv_insert(), ÑÑиÑаÑÑÑÑ Ð½ÐµÑовмеÑÑимÑми.
F.45.3.5. ÐÑеÑаÑоÑÑ
СледÑÑÑие ÑÑнкÑии пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ÑеÑаÑоÑов, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑедвигаÑÑÑÑ Ð¿Ð¾ пеÑеменнÑм-коллекÑиÑм. ÐÑи ÑÑнкÑии ÑабоÑаÑÑ Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑиÑми, ÑозданнÑми ÑÑнкÑиÑми pgv_set_elem() и pgv_insert().
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ | ÐпиÑание |
|---|---|---|
pgv_first(package text, name text, key_type anyelement) | anyelement | ÐозвÑаÑÐ°ÐµÑ Ð¿ÐµÑвÑй клÑÑ Ð¸Ð· пеÑеменной-коллекÑии. ÐоллекÑии ÑоÑÑиÑÑÑÑÑÑ Ð¿Ð¾ клÑÑÑ Ð² поÑÑдке возÑаÑÑаниÑ. ÐаÑамеÑÑ key_type необÑ
одим Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемого знаÑениÑ. ÐÑли пеÑеданное знаÑение name не ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пеÑеменной-коллекÑии, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
pgv_last(package text, name text, key_type anyelement) | anyelement | ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ñледний клÑÑ Ð¸Ð· пеÑеменной-коллекÑии. ÐоллекÑии ÑоÑÑиÑÑÑÑÑÑ Ð¿Ð¾ клÑÑÑ Ð² поÑÑдке возÑаÑÑаниÑ. ÐаÑамеÑÑ key_type необÑ
одим Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемого знаÑениÑ. ÐÑли пеÑеданное знаÑение name не ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пеÑеменной-коллекÑии, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
pgv_next(package text, name text, key anyelement) | anyelement | ÐозвÑаÑÐ°ÐµÑ ÑледÑÑÑий клÑÑ Ð¸Ð· пеÑеменной-коллекÑии. ÐеÑеданнÑй клÑÑ key Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑÑÑÑÑвоваÑÑ Ð² коллекÑии. ÐозвÑаÑÐ°ÐµÑ NULL, еÑли иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ñледнего клÑÑа в коллекÑии. ÐоллекÑии ÑоÑÑиÑÑÑÑÑÑ Ð¿Ð¾ клÑÑÑ Ð² поÑÑдке возÑаÑÑаниÑ. ÐÑли пеÑеданное знаÑение name не ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пеÑеменной-коллекÑии, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
pgv_prior(package text, name text, key anyelement) | anyelement | ÐозвÑаÑÐ°ÐµÑ Ð¿ÑедÑдÑÑий клÑÑ Ð¸Ð· пеÑеменной-коллекÑии. ÐеÑеданнÑй клÑÑ key Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑÑÑÑÑвоваÑÑ Ð² коллекÑии. ÐозвÑаÑÐ°ÐµÑ NULL, еÑли иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑвого клÑÑа в коллекÑии. ÐоллекÑии ÑоÑÑиÑÑÑÑÑÑ Ð¿Ð¾ клÑÑÑ Ð² поÑÑдке возÑаÑÑаниÑ. ÐÑли пеÑеданное знаÑение name не ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пеÑеменной-коллекÑии, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
pgv_count(package text, name text) | integer | ÐозвÑаÑÐ°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑлеменÑов в коллекÑии. ÐÑли пеÑеданное знаÑение name не ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пеÑеменной-коллекÑии, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. |
F.45.3.6. ФÑнкÑии Ñазного назнаÑениÑ
| ФÑнкÑÐ¸Ñ | ÐозвÑаÑÐ°ÐµÑ | ÐпиÑание |
|---|---|---|
pgv_exists(package text, name text) | bool | ÐозвÑаÑÐ°ÐµÑ true, еÑли ÑÑÑеÑÑвÑÑÑ Ð¿Ð°ÐºÐµÑ Ð¸ пеÑеменнаÑ, или false в пÑоÑивном ÑлÑÑае. |
pgv_exists(package text) | bool | ÐозвÑаÑÐ°ÐµÑ true, еÑли ÑÑÑеÑÑвÑÑÑ Ð¿Ð°ÐºÐµÑ Ð¸ пеÑеменнаÑ, или false в пÑоÑивном ÑлÑÑае. |
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.45.3.7. УÑÑаÑевÑие ÑÑнкÑии
F.45.3.7.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.45.3.7.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.45.3.7.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.45.3.7.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.45.3.7.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.45.3.7.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.45.3.7.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.45.4. ÐажнÑе замеÑаниÑ
F.45.4.1. ÐÑавила ÑоÑÑиÑовки в коллекÑиÑÑ
ÐоллекÑии Ñ
ÑанÑÑÑÑ Ð² поÑÑдке возÑаÑÑаниÑ. ÐÐ»Ñ ÐºÐ»ÑÑей Ñипа text поÑÑебÑеÑÑÑ Ð¿Ñавило ÑоÑÑиÑовки Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑдка ÑлеменÑов. ÐÑли пÑи вÑÑавке пеÑвого ÑлеменÑа коллекÑии пÑавило ÑоÑÑиÑовки не Ñказано, иÑполÑзÑеÑÑÑ Ð¿Ñавило ÑоÑÑиÑовки по ÑмолÑаниÑ. РпÑоÑивном ÑлÑÑае иÑполÑзÑеÑÑÑ Ñказанное пÑавило ÑоÑÑиÑовки.
F.45.4.2. ÐÑÑÑоÑÑ Ð´Ð»Ñ ÑÑнкÑий, возвÑаÑаÑÑÐ¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва
ÐÑе ÑÑнкÑии, возвÑаÑаÑÑие множеÑÑва, за иÑклÑÑением pgv_select(package,variable), ÑикÑиÑÑÑÑ Ñвои ÑезÑлÑÑаÑÑ Ð¿Ñи вÑполнении пеÑвой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ FETCH из кÑÑÑоÑа, и на ниÑ
не влиÑÑÑ Ð´Ð°Ð»ÑнейÑие дейÑÑÐ²Ð¸Ñ Ñ Ð´Ð°Ð½Ð½Ñми.
РезÑлÑÑаÑÑ pgv_select(package,variable) пÑинимаÑÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки, и на ниÑ
влиÑÑÑ ÑÑанзакÑии/Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² коллекÑии. ÐÐ»Ñ ÑÑнкÑии pgv_select(), вÑзÑваемой Ð´Ð»Ñ ÑÑанзакÑионной коллекÑии, Ñнимок коллекÑии пÑоÑмаÑÑиваеÑÑÑ ÐºÑÑÑоÑами пÑи вÑполнении пеÑвой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ FETCH, но Ñ ÑÑÑÑом изменений, коÑоÑÑе бÑли ÑÐ´ÐµÐ»Ð°Ð½Ñ Ð² ÑÑой ÑÑанзакÑии и в заÑикÑиÑованнÑÑ
подÑÑанзакÑиÑÑ
.
F.45.5. ÐÑимеÑÑ
ÐпÑеделение ÑкалÑÑнÑÑ
пеÑеменнÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии 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();
Ð ÑÑÐ¸Ñ Ð¿ÑимеÑÐ°Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ иÑполÑзование пеÑеменнÑÑ -коллекÑий и ÑÑнкÑий иÑеÑаÑоÑов:
sql
SELECT pgv_set_elem('pack', 'var', 1, 1);
SELECT pgv_set_elem('pack', 'var', 5, 5);
SELECT pgv_set_elem('pack', 'var', 10, 10);
SELECT pgv_first('pack', 'var', NULL::int);
pgv_first
-----------
1
SELECT pgv_last('pack', 'var', NULL::int);
pgv_last
----------
10
SELECT pgv_next('pack', 'var', pgv_first('pack', 'var', NULL::int));
pgv_next
----------
5
SELECT pgv_prior('pack', 'var', pgv_last('pack', 'var', NULL::int));
pgv_prior
-----------
5
SELECT pgv_prior('pack', 'var', pgv_first('pack', 'var', NULL::int));
pgv_prior
-----------
SELECT pgv_next('pack', 'var', pgv_last('pack', 'var', NULL::int));
pgv_prior
-----------
SELECT pgv_next('pack', 'var', 3);
pgv_next
----------
5
SELECT pgv_prior('pack', 'var', 3);
pgv_prior
-----------
1
SELECT pgv_get_elem('pack', 'var', pgv_last('pack', 'var', NULL::int), NULL::int);
pgv_get_elem
--------------
10
SELECT pgv_remove_elem('pack', 'var', pgv_last('pack', 'var', NULL::int));
pgv_remove_elem
-----------------
SELECT pgv_get_elem('pack', 'var', pgv_last('pack', 'var', NULL::int), NULL::int);
pgv_get_elem
--------------
5
(1 row)ÐÑи пÑимеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ, как пÑавила ÑоÑÑиÑовки влиÑÑÑ Ð½Ð° поÑÑдок ÑлеменÑов в коллекÑии, а Ñакже как пеÑебиÑаÑÑ Ð²ÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑÐ¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñиклов PL/pgSQL:
sql
SELECT pgv_set_elem('pack', 'var1', 'а' COLLATE "ru_RU", 'а'::text);
SELECT pgv_set_elem('pack', 'var1', 'д' COLLATE "ru_RU", 'д'::text);
SELECT pgv_set_elem('pack', 'var1', 'е' COLLATE "ru_RU", 'е'::text);
SELECT pgv_set_elem('pack', 'var1', 'Ñ' COLLATE "ru_RU", 'Ñ'::text);
SELECT pgv_set_elem('pack', 'var1', 'ж' COLLATE "ru_RU", 'ж'::text);
SELECT pgv_set_elem('pack', 'var1', 'Ñ' COLLATE "ru_RU", 'Ñ'::text);
DO
$$
DECLARE
iter text;
BEGIN
iter := pgv_first('pack', 'var1', NULL::text);
WHILE iter IS NOT NULL LOOP
RAISE NOTICE '%', pgv_get_elem('pack', 'var1', iter, NULL::text);
iter := pgv_next('pack', 'var1', iter);
END LOOP;
END;
$$;
NOTICE: а
NOTICE: д
NOTICE: е
NOTICE: Ñ
NOTICE: ж
NOTICE: Ñ
SELECT pgv_set_elem('pack', 'var2', 'а' COLLATE "C", 'а'::text);
SELECT pgv_set_elem('pack', 'var2', 'д' COLLATE "C", 'д'::text);
SELECT pgv_set_elem('pack', 'var2', 'е' COLLATE "C", 'е'::text);
SELECT pgv_set_elem('pack', 'var2', 'Ñ' COLLATE "C", 'Ñ'::text);
SELECT pgv_set_elem('pack', 'var2', 'ж' COLLATE "C", 'ж'::text);
SELECT pgv_set_elem('pack', 'var2', 'Ñ' COLLATE "C", 'Ñ'::text);
DO
$$
DECLARE
iter text;
BEGIN
iter := pgv_first('pack', 'var2', NULL::text);
WHILE iter IS NOT NULL LOOP
RAISE NOTICE '%', pgv_get_elem('pack', 'var2', iter, NULL::text);
iter := pgv_next('pack', 'var2', iter);
END LOOP;
END;
$$;
NOTICE: а
NOTICE: д
NOTICE: е
NOTICE: ж
NOTICE: Ñ
NOTICE: ÑF.45.6. ÐвÑоÑÑ
Postgres Professional, ÐоÑква, РоÑÑиÑ