Модуль dump_stat предоставляет функции, позволяющие выгрузить и восстановить содержимое таблицы pg_statistic. При выполнении выгрузки/восстановления данных вы можете воспользоваться dump_stat для переноса существующей статистики на новый сервер, обойдясь без выполнения команды ANALYZE для всего кластера, что может значительно сократить время простоя для больших баз данных. Функция dump_statistic выдаёт операторы INSERT, которые затем можно применить к совместимой базе данных. Чтобы успешно восстановить статистические данные, вы должны установить это расширение и на исходном, и на целевом сервере, так как эти операторы будут задействовать функции, реализованные в dump_stat.
Заметьте, что определение таблицы pg_statistic может поменяться, в результате чего сгенерированный скрипт может оказаться несовместимым с будущими выпусками Postgres Pro.
Расширение dump_stat включено в состав Postgres Pro. Установив Postgres Pro, вы должны выполнить команду CREATE EXTENSION, чтобы подготовить dump_stat к работе, следующим образом:
CREATE EXTENSION dump_stat;
anyarray_to_text(array anyarray) returns text
Возвращает данный массив в виде значения text.
dump_statistic() returns setof text
Функция dump_statistic выгружает содержимое системного каталога pg_statistic. Она выдаёт INSERT для каждого кортежа в pg_statistic, кроме тех, что содержат статистические данные о таблицах в схемах information_schema и pg_catalog.
Оператор INSERT принимает следующую форму:
WITH upsert as ( UPDATE pg_catalog.pg_statistic SETимя_столбца=выражение[, ...] WHERE starelid =t_relname::regclass AND to_attname(t_relname, staattnum) =t_attnameAND to_atttype(t_relname, staattnum) =t_atttypeAND stainherit =t_stainheritRETURNING *) ins as ( SELECTвыражение[, ...] WHERE NOT EXISTS (SELECT * FROM upsert) AND to_attnum(t_relname,t_attname) IS NOT NULL AND to_atttype(t_relname,t_attname) =t_atttype) INSERT INTO pg_catalog.pg_statistic SELECT * FROM ins; гдевыражениеможет быть следующим: array_in(текст_массива,имя_типа::regtype::oid, -1)значение::имя_типа
Чтобы сохранить выданные операторы, направьте вывод psql в файл, используя стандартные возможности psql. Аргументы psql подробно рассматриваются в psql. Метакоманды, начинающиеся с обратной косой черты, не поддерживаются.
Например, чтобы сохранить статистику базы данных имя_базы в файле dump_stat.sql, выполните:
$ psql -XAtq -c "SELECT dump_statistic()" имя_базы > dump_stat.sql
dump_statistic(schema_name text) returns setof text
dump_statistic выгружает содержимое системного каталога pg_statistic. Она выдаёт оператор INSERT для каждого кортежа в pg_statistic, относящегося к какой-либо таблице в схеме schema_name.
dump_statistic(schema_name text, table_name text) returns setof text
dump_statistic выгружает содержимое системного каталога pg_statistic. Она формирует оператор INSERT для каждого кортежа в pg_statistic, относящегося к указанной таблице schema_name.table_name.
dump_statistic(relation regclass) returns setof text
dump_statistic выгружает содержимое системного каталога pg_statistic. Она формирует оператор INSERT для каждого кортежа в pg_statistic, содержащего статистические данные отношения relation.
to_schema_qualified_operator(opid oid) returns text
Выдаёт дополненное схемой имя оператора по его идентификатору opid. Например:
test=# SELECT to_schema_qualified_operator('+(int,int)'::regoperator);
to_schema_qualified_operator
------------------------------------------------
pg_catalog.+(pg_catalog.int4, pg_catalog.int4)
(1 row)to_schema_qualified_type(typid oid) returns text
Выдаёт дополненное схемой имя типа по его идентификатору typid.
to_schema_qualified_relation(relid oid) returns text
Выдаёт дополненное схемой имя отношения по его идентификатору relid.
anyarray_elemtype(arr anyarray) returns oid
Возвращает тип элемента массива, заданного по oid. Например:
test=# SELECT anyarray_elemtype(array_in('{1,2,3}', 'int'::regtype, -1));
anyarray_elemtype
-------------------
23
(1 row)to_attname(relation regclass, colnum int2) returns text
Для отношения с заданным именем relation и номером столбца colnum возвращает имя столбца в виде значения text.
to_attnum(relation regclass, col text) returns int2
Для отношения с заданным именем relation и столбца с именем col возвращает номер столбца в виде значения int2.
to_atttype(relation regclass, col text) returns text
Для отношения с заданным именем relation и столбца с именем col возвращает дополненное схемой имя типа столбца в виде значения text.
to_atttype(relation regclass, colnum int2) returns text
Для отношения с заданным именем relation и столбца с номером colnum возвращает дополненное схемой имя типа столбца в виде значения text.
to_namespace(nsp text) returns oid
to_namespace повторяет поведение приведения к типу regnamespace, которое отсутствует в PostgreSQL версии 9.4 (и предыдущих). Эта функция возвращает oid данной схемы.
get_namespace(relation oid) returns oid
get_namespace возвращает схему заданного отношения в виде oid.