Документация к Postgres Pro 9.5.12.1 | |||
---|---|---|---|
Пред. | Уровень выше | Приложение F. Дополнительно поставляемые модули | След. |
F.37. pg_variables
F.37.1. Введение
Модуль pg_variables содержит функции для работы с переменными различных типов. Созданные переменные существуют в течение текущей пользовательской сессии.
Учтите, что этот модуль не поддерживает транзакции и точки сохранения. Например:
SELECT pgv_set_int('vars', 'int1', 101); BEGIN; SELECT pgv_set_int('vars', 'int2', 102); ROLLBACK; SELECT * FROM pgv_list() order by package, name; package | name ---------+------ vars | int1 vars | int2 (2 rows)
F.37.2. Функции модуля
Реализованные в модуле pg_variables функции представлены в следующих таблицах. Этот модуль поддерживает скалярные типы и записи.
Для функций pgv_get_()
требуется, чтобы существовал пакет и указанная переменная. Поэтому перед использованием функций pgv_get_()
необходимо установить переменную с помощью функций pgv_set_()
.
Если пакет не существует, выдаётся следующая ошибка:
SELECT pgv_get_int('vars', 'int1'); ERROR: unrecognized package "vars"
Если переменная не существует, вы получите следующую ошибку:
SELECT pgv_get_int('vars', 'int1'); ERROR: unrecognized variable "int1"
Функции pgv_get_()
проверяют тип переменной. Если тип переменной не соответствует типу функции, выдаётся ошибка:
SELECT pgv_get_text('vars', 'int1'); ERROR: variable "int1" requires "integer" value
F.37.2.8. Записи
Следующие функции этого модуля предназначены для работы с наборами типа запись.
Для использования функций pgv_update()
, pgv_delete()
и pgv_select()
должны существовать пакет и указанная переменная, в противном случае возникает ошибка. Поэтому перед использованием этих функций необходимо установить переменную с помощью функции pgv_insert()
.
Функции pgv_update()
, pgv_delete()
и pgv_select()
проверяют тип переменной. Если типом переменной оказывается не тип записи, выдаётся ошибка.
Функция | Возвращает | Описание |
---|---|---|
pgv_insert(package text, name text, r record) | 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) | набор записей | Возвращает записи из набора переменных. |
pgv_select(package text, name text, value anynonarray) | record | Возвращает запись с соответствующим первичным ключом (он задаётся в первом столбце r). |
pgv_select(package text, name text, value anyarray) | набор записей | Возвращает записи из набора переменных с соответствующими первичными ключами (первичный ключ задаётся в первом столбце r). |
F.37.2.9. Функции разного назначения
Функция | Возвращает | Описание |
---|---|---|
pgv_exists(package text, name 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) | Возвращает список пакетов и связанных с ними переменных. |
pgv_stats() | table(package text, used_memory bigint) | Показывает список задействованных пакетов и объём занимаемой ими памяти (в байтах). |
Заметьте, что pgv_stats() работает только в PostgreSQL 9.6 и новее.
F.37.3. Примеры
Использовать функции для работы со скалярными переменными просто:
SELECT pgv_set_int('vars', 'int1', 101); SELECT pgv_set_int('vars', 'int2', 102); SELECT pgv_get_int('vars', 'int1'); pgv_get_int ------------- 101 (1 row) SELECT pgv_get_int('vars', 'int2'); pgv_get_int ------------- 102 (1 row)
Допустим, у нас есть таблица 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) (2 rows) SELECT pgv_select('vars', 'r1', 1); pgv_select ------------ (1,str11) (1 row) SELECT pgv_select('vars', 'r1', 0); pgv_select ------------ (0,str00) (1 row) SELECT pgv_select('vars', 'r1', ARRAY[1, 0]); pgv_select ------------ (1,str11) (0,str00) (2 rows) SELECT pgv_delete('vars', 'r1', 1); SELECT pgv_select('vars', 'r1'); pgv_select ------------ (0,str00) (1 row)
Вы можете получить список пакетов и переменных:
SELECT * FROM pgv_list() order by package, name; package | name ---------+------ vars | int1 vars | int2 vars | r1 (3 rows)
И получить объём занятой ими памяти:
SELECT * FROM pgv_stats() order by package; package | used_memory ---------+------------- vars | 16736 (1 row)
Вы можете удалять переменные или целые пакеты:
SELECT pgv_remove('vars', 'int1'); SELECT pgv_remove('vars');
Вы можете удалить все пакеты и переменные:
SELECT pgv_free();
Пред. | Начало | След. |
pg_trgm | Уровень выше | postgres_fdw |