2008/12/10, Euler Taveira de Oliveira <[EMAIL PROTECTED]>:
> Osvaldo Kussama escreveu:
>> Alguém pode tentar dar uma luz no que eu não estou conseguindo enxergar?
>>
> Vide explicação [1] na -hackers. Sugiro adaptar a sua consulta para a
> sugerida
> pelo Tom [2] ou algo semelhante.
>
> [1] http://archives.postgresql.org/pgsql-hackers/2008-12/msg00537.php
> [2] http://archives.postgresql.org/pgsql-hackers/2008-12/msg00511.php
>


Olá Euler:

Descobri que se colcar um cast explícito e um par de parênteses extra funciona:

bdteste=# SELECT array_to_string(
bdteste(#          ARRAY(SELECT pa.attname FROM pg_attribute pa
bdteste(#                                  JOIN pg_class pc ON
(pa.attrelid = pc.oid)
bdteste(#                 WHERE pc.relname = 'teste'
bdteste(#                   AND pa.attnum > 0
bdteste(#                   AND  pa.attnum <> ALL (SELECT pco.conkey
FROM pg_constraint pco
bdteste(#                                            WHERE
pco.conrelid = pa.attrelid
bdteste(#                                              AND pco.contype = 'p')),
bdteste(#                          ',');
ERRO:  operador não existe: smallint <> smallint[]
DICA:  Nenhum operador corresponde com o nome e o(s) tipo(s) de
argumento(s) informados. Você precisa adicionar conversões de tipo
explícitas.
bdteste=#
bdteste=# -- incluindo um cast smallint[] explícito:
bdteste=# SELECT array_to_string(
bdteste(#          ARRAY(SELECT pa.attname FROM pg_attribute pa
bdteste(#                                  JOIN pg_class pc ON
(pa.attrelid = pc.oid)
bdteste(#                 WHERE pc.relname = 'teste'
bdteste(#                   AND pa.attnum > 0
bdteste(#                   AND  pa.attnum <> ALL (SELECT pco.conkey
FROM pg_constraint pco
bdteste(#                                           WHERE pco.conrelid
= pa.attrelid
bdteste(#                                             AND pco.contype
= 'p')::smallint[]),
bdteste(#                          ',');
ERRO:  operador não existe: smallint <> smallint[]
DICA:  Nenhum operador corresponde com o nome e o(s) tipo(s) de
argumento(s) informados. Você precisa adicionar conversões de tipo
explícitas.
bdteste=#
bdteste=# -- incluindo um parênteses extra:
bdteste=# SELECT array_to_string(
bdteste(#          ARRAY(SELECT pa.attname FROM pg_attribute pa
bdteste(#                                  JOIN pg_class pc ON
(pa.attrelid = pc.oid)
bdteste(#                 WHERE pc.relname = 'teste'
bdteste(#                   AND pa.attnum > 0
bdteste(#                   AND  pa.attnum <> ALL ((SELECT pco.conkey
FROM pg_constraint pco
bdteste(#                                            WHERE
pco.conrelid = pa.attrelid
bdteste(#                                              AND pco.contype
= 'p')::smallint[])),
bdteste(#                          ',');
    array_to_string
-----------------------
 nome,espec,qtde,valor
(1 registro)

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a