Em terça-feira, 10 de maio de 2016, David E. Wheeler <da...@justatheory.com>
escreveu:

> Hackers,
>
> pgTAP has a function that compares two values of a given type, which it
> uses for comparing column defaults. It looks like this:
>
>     CREATE OR REPLACE FUNCTION _def_is( TEXT, TEXT, anyelement, TEXT )
>     RETURNS TEXT AS $$
>     DECLARE
>         thing text;
>     BEGIN
>         IF $1 ~ '^[^'']+[(]' THEN
>             -- It's a functional default.
>             RETURN is( $1, $3, $4 );
>         END IF;
>
>         EXECUTE 'SELECT is('
>                  || COALESCE($1, 'NULL' || '::' || $2) || '::' || $2 || ',
> '
>                  || COALESCE(quote_literal($3), 'NULL') || '::' || $2 ||
> ', '
>                  || COALESCE(quote_literal($4), 'NULL')
>         || ')' INTO thing;
>         RETURN thing;
>     END;
>     $$ LANGUAGE plpgsql;
>
> The is() function does an IS DISTINCT FROM to compare the two values
> passed to it. This has been working pretty well for years, but one place it
> doesn’t work is with JSON values. I get:
>
>     LINE 1: SELECT NOT $1 IS DISTINCT FROM $2
>                           ^
>     HINT:  No operator matches the given name and argument type(s). You
> might need to add explicit type casts.
>     QUERY:  SELECT NOT $1 IS DISTINCT FROM $2
>
> This makes sense, of course, and I could fix it by comparing text values
> instead of json values when the values are JSON. But of course the lack of
> a = operator is not limited to JSON. So I’m wondering if there’s an
> interface at the SQL level to tell me whether a type has an = operator?
> That way I could always use text values in those situations.
>
>
Searching for the operator in pg_operator catalog isn't enought?

Regards,



-- 
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Timbira: http://www.timbira.com.br
>> Blog: http://fabriziomello.github.io
>> Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
>> Github: http://github.com/fabriziomello

Reply via email to