Модуль dump_stat предоставляет функции, позволяющие скопировать и восстановить содержимое таблицы pg_statistic. Функция dump_statistic генерирует операторы INSERT, которые затем можно применить к совместимой базе данных. Это расширение должно устанавливаться на целевом сервере, чтобы статистические данные были восстановлены успешно, так как генерируемые операторы сильно зависят от функций этого модуля.
Заметьте, что определение таблицы pg_statistic может поменяться, в результате чего сгенерированный скрипт может оказаться несовместимым с будущими выпусками Postgres Pro.
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 to_schema_qualified_relation(starelid) =t_relnameAND 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 test -A test=# \t test=# \o dump_stat.sql test=# select dump_statistic();
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(relid oid) returns setof text
dump_statistic выгружает содержимое системного каталога pg_statistic. Она формирует оператор INSERT для каждого кортежа в pg_statistic, содержащего статистические данные об отношении, заданном идентификатором relid.
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 text, colnum int2) returns text
Для отношения с заданным именем relation и номером столбца colnum возвращает имя столбца в виде значения text.
to_attnum(relation text, col text) returns int2
Для отношения с заданным именем relation и столбца с именем col возвращает номер столбца в виде значения int2.
to_atttype(relation text, col text) returns text
Для отношения с заданным именем relation и столбца с именем col возвращает дополненное схемой имя типа столбца в виде значения text.
to_atttype(relation text, 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.