postgresql: создание оператора умножения текста на целое число

Я пытаюсь отладить запрос Microsoft SQL внутри Posgresql (короче говоря, я предпочитаю сообщения об ошибках, которые он возвращает), когда я наткнулся на некоторый SQL, который умножал выбор подстроки на целое число, теперь я, очевидно, мог бы использовать каждую часть, используя ::integer однако есть много подстрок, которые требуют приведения, и много запросов, которые я хотел выполнить, поэтому я решил, что могу упростить свою жизнь, используя оператор для решения этой проблемы с помощью следующей функции.

CREATE OR REPLACE FUNCTION public.multiplytext2int(text,integer)
RETURNS integer AS
$$
SELECT CASE
        WHEN $1 ~ '^[0-9]+$'
        THEN $1::integer * $2
        ELSE 0::integer
    END
$$
LANGUAGE sql IMMUTABLE;

очевидно, что логика не совсем герметична, но ее будет достаточно для запросов, которые я буду выполнять, поэтому я пытаюсь создать оператор

CREATE OPERATOR * (
     LEFTARG = text
    ,RIGHTARG = integer
    ,FUNCTION = multiplytext2int
)

когда я запускаю это, я получаю следующую ошибку

ВНИМАНИЕ: атрибут оператора "функция" не распознан ОШИБКА: необходимо указать процедуру оператора

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

ОШИБКА: необходимо указать процедуру оператора Состояние SQL: 42P13

что я здесь делаю не так?

в конечном итоге я хочу иметь возможность набирать SELECT '1'::text * 2::integer без ошибки оператора не существует.


person Lucas    schedule 21.11.2018    source источник


Ответы (1)


Хотя это функция, аргументом для использования является procedure.

CREATE OPERATOR * (
     LEFTARG = text
    ,RIGHTARG = integer
    ,PROCEDURE = multiplytext2int
)
person Kaushik Nayak    schedule 21.11.2018
comment
Я только что обнаружил свою ошибку, я просматривал неправильную версию документации (postgresql 11), большое спасибо за ваш ответ. - person Lucas; 21.11.2018