Появилась нужда изменить системную процедуру 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.
Что делать? Только пересобирать? Очень бы не хотелось. Гугл молчит пока.