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