F.17. dump_stat — функции выгрузки и восстановления содержимого таблицы pg_statistic
#
Модуль dump_stat
предоставляет функции, позволяющие выгрузить и восстановить содержимое таблицы pg_statistic
. При выполнении выгрузки/восстановления данных вы можете воспользоваться dump_stat
для переноса существующей статистики на новый сервер, обойдясь без выполнения команды ANALYZE
для всего кластера, что может значительно сократить время простоя для больших баз данных. Функция dump_statistic
выдаёт операторы INSERT
, которые затем можно применить к совместимой базе данных. Чтобы успешно восстановить статистические данные, вы должны установить это расширение и на исходном, и на целевом сервере, так как эти операторы будут задействовать функции, реализованные в dump_stat
.
Заметьте, что определение таблицы pg_statistic
может поменяться, в результате чего сгенерированный скрипт может оказаться несовместимым с будущими выпусками Postgres Pro.
F.17.1. Установка #
Расширение dump_stat
включено в состав Postgres Pro. Установив Postgres Pro, вы должны выполнить команду CREATE EXTENSION, чтобы подготовить dump_stat
к работе, следующим образом:
CREATE EXTENSION dump_stat;
F.17.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_attname
AND to_atttype(t_relname
, staattnum) =t_atttype
AND stainherit =t_stainherit
RETURNING *) 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
.