Сравнение типов в postgresql, как сравнивать bigint и т.д ..?

Мне нужна функция, которая внесет некоторую логику после сравнения типов, но я получил ошибку, например:

ERROR: invalid input syntax for type oid: "bigint"

CREATE OR REPLACE FUNCTION loginValidator(luser LoginUserType) RETURNS text [] AS $$

DECLARE
    errors text []; counter SMALLINT = 0;
n_regex varchar; e_regex varchar; p_regex varchar;

BEGIN

  SELECT nickname_r , email_r, password_r INTO n_regex, e_regex, p_regex FROM regex;

    RAISE NOTICE 'Type %',pg_typeof(luser.user_id); // bigint result


    IF luser.nick_name !~ n_regex THEN counter := counter + 1; errors [counter] := luser.nick_name;
    ELSEIF luser.email !~ e_regex THEN counter := counter + 1; errors [counter] := luser.email;
    ELSEIF luser.u_password !~ p_regex THEN counter := counter + 1; errors [counter] := luser.u_password;
    ELSEIF pg_typeof(luser.user_id) != 'bigint' THEN counter := counter + 1; errors [counter] := luser.user_id;
        -- How to compare here the types ?
    END IF;

    return errors;

 END;
$$ language plpgsql;**strong text**


SELECT loginValidator(row(8765768576,'Maks1988','Maks.Burkov88@gmail.com','@PlemiaMaks89987'));

Как определяется loginusertype? В какой строке кода выдается ошибка?

Laurenz Albe 31.10.2018 13:19
0
1
667
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

pg_typeof дает результаты типа regtype, которые не могут быть неявно преобразованы из типа text. Итак, вам нужно сделать явное приведение:

SELECT pg_typeof(1::bigint) = 'bigint' -- ERROR: invalid input syntax for type oid: "bigint"

SELECT pg_typeof(1::bigint) = 'bigint'::regtype  -- ok; TRUE

Другие вопросы по теме