Postgresql - Редактировать функцию подписи - PullRequest
2 голосов
/ 11 мая 2010

POSTGRESQL 8.4.3 - я создал функцию с этой подписью

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ logcountforlasthour () ВОЗВРАЩАЕТ SETOF запись AS

понял, что хотел бы изменить это на

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ logcountforlasthour () ВОЗВРАЩАЕТСЯ ТАБЛИЦА (ip bigint, count bigint) запись AS

но когда я применяю это изменение в инструменте запроса, оно не принимается или, скорее, оно принимается, синтаксическая ошибка отсутствует, но текст функции не изменился. даже если я запускаю «DROP FUNCTION logcountforlasthour ()» между правками, старый синтаксис возвращается

если я отредактирую тело функции, это нормально, она меняется, но не подпись

есть что-то, чего мне не хватает

спасибо

1 Ответ

1 голос
/ 11 мая 2010

Из руководства PostgreSQL 8.4 :

Для замены текущего определения существующей функции, используйте CREATE OR ЗАМЕНИТЕ ФУНКЦИЮ. Это невозможно изменить имя или тип аргумента функции таким образом (если вы пытались, вы бы на самом деле создавали новую, отличная функция). Кроме того, СОЗДАТЬ ИЛИ ЗАМЕНА ФУНКЦИИ не позволит изменить тип возврата существующего функция. Чтобы сделать это, вы должны бросить и воссоздать функцию. (Когда используешь OUT параметры, это означает, что вы не можете изменить имена или типы любого OUT параметры, кроме падения функция.)

Если вы бросите, а затем воссоздаете функция, новая функция не та же сущность, что и старая; у тебя будет отбросить существующие правила, представления, триггеры и т. д., которые относятся к старому функция. Используйте СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЯ для изменения функции определение без разрушения объектов которые относятся к функции. Также, ALTER FUNCTION можно использовать для изменения большинство вспомогательных свойств существующая функция.

Пользователь, который создает функцию становится владельцем функции.

, а также примечание:

... PostgreSQL допускает перегрузку функций; то есть одно и то же имя может быть использовано для нескольких различные функции, если они имеют разные типы аргументов.

...