LINUX.ORG.RU

Как изменить системную процедуру PostgreSQL ?

 , ,


0

1

Появилась нужда изменить системную процедуру PostgreSQL.

Процедура называется «pg_catalog».pg_stat_get_activity. Нужно изменить имена ее параметров.

делаю:

begin;
DROP FUNCTION "pg_catalog".pg_stat_get_activity(integer);
CREATE OR REPLACE FUNCTION "pg_catalog".pg_stat_get_activity(IN pid_in integer, OUT datid oid, OUT pid_out integer, OUT usesysid oid, OUT application_name text, OUT state text, OUT query text, OUT waiting boolean, OUT xact_start timestamp with time zone, OUT query_start timestamp with time zone, OUT backend_start timestamp with time zone, OUT state_change timestamp with time zone, OUT client_addr inet, OUT client_hostname text, OUT client_port integer)
  RETURNS SETOF record AS
'pg_stat_get_activity'
  LANGUAGE internal STABLE
  COST 1
  ROWS 100;
ALTER FUNCTION "pg_catalog".pg_stat_get_activity(integer)
  OWNER TO postgres;
COMMENT ON FUNCTION "pg_catalog".pg_stat_get_activity(integer) IS 'statistics: information about currently active backends';
commit;

Получаю отлуп:

ОШИБКА:  удалить объект функция pg_stat_get_activity(integer) нельзя, так как он нужен системе баз данных

********** Ошибка **********

ОШИБКА: удалить объект функция pg_stat_get_activity(integer) нельзя, так как он нужен системе баз данных
SQL-состояние: 2BP01

Если убрать DROP, то выхлоп следующий:

ОШИБКА:  изменить тип возврата существующей функции нельзя
DETAIL:  Параметры OUT определяют другой тип строки.
HINT:  Сначала удалите её с помощью DROP FUNCTION.

********** Ошибка **********

ОШИБКА: изменить тип возврата существующей функции нельзя
SQL-состояние: 42P13
Подробности: Параметры OUT определяют другой тип строки.
Подсказка: Сначала удалите её с помощью DROP FUNCTION.

Что делать? Только пересобирать? Очень бы не хотелось. Гугл молчит пока.

★★★★★

хм... процедура с одинаковыми именами параметров наблюдается только в 9.2.4 версии. В 9.1.9 они по-разному называются.

bvn13 ★★★★★
() автор топика

системные функции, наверно, создаются где-то в initdb, который инициализирует СУБД
так что, видимо, только пересобирать

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.