Em 05/12/08, Luiz Henrique<[EMAIL PROTECTED]> escreveu:
> Bom dia Osvaldo,
>
> Utilize da seguinte forma: (deve funcionar)
>
> SELECT
>     pa.attname
> FROM
>     pg_attribute pa
> where
>     pa.attrelid = (select pc.oid from pg_class pc where pc.relname =
> 'teste')
> and
>     pa.attnum > 0
> and
>     array[pa.attnum] <> ALL (SELECT pco.conkey FROM pg_constraint pco
> WHERE pco.conrelid = pa.attrelid AND pco.contype = 'p');
>


Olá Luiz,

Obrigado.
Realmente dessa forma funciona.
Posso até mudar o operador de "<> ALL" para "NOT(... <@...)" (não
estar contido).

Contudo ainda não consegui entender por que não funciona se o comando
abaixo funciona:
bdteste=# SELECT 3::smallint <> ALL (ARRAY[2, 3, 4]::smallint[]);
 ?column?
----------
 f
(1 registro)

Continuei a testar e descobri que se explicitar que é um array:
 pa.attnum <> ALL ((SELECT pco.conkey FROM pg_constraint pco WHERE
pco.conrelid = pa.attrelid AND pco.contype = 'p')::smallint[])
funciona!
Me parece redundante pois, conforme a mensagem de erro já diz, ele
sabe que é um smallint[].

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

Responder a