F.16. dump_stat — функции выгрузки и восстановления содержимого таблицы pg_statistic #
Модуль dump_stat предоставляет функции, позволяющие выгрузить и восстановить содержимое таблицы pg_statistic. При выполнении выгрузки/восстановления данных вы можете воспользоваться dump_stat для переноса существующей статистики на новый сервер, обойдясь без выполнения команды ANALYZE для всего кластера, что может значительно сократить время простоя для больших баз данных. Функция dump_statistic выдаёт операторы INSERT, которые затем можно применить к совместимой базе данных. Чтобы успешно восстановить статистические данные, вы должны установить это расширение и на исходном, и на целевом сервере, так как эти операторы будут задействовать функции, реализованные в dump_stat.
Заметьте, что определение таблицы pg_statistic может поменяться, в результате чего сгенерированный скрипт может оказаться несовместимым с будущими выпусками Postgres Pro.
F.16.1. Установка #
Расширение dump_stat включено в состав Postgres Pro. Установив Postgres Pro, вы должны выполнить команду CREATE EXTENSION, чтобы подготовить dump_stat к работе, следующим образом: 
CREATE EXTENSION dump_stat;
F.16.2. Функции #
-  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.