Leandro DUTRA wrote:

>> Os domínios conseguem de fato manter integridade sobre as operações?
> 
> Sim, de uma maneira muito simples: definem-se as restrições de
> integridade (CONSTRAINTs) sobre os DOMAINs — NOT NULL, CHECK, mesmo
> DEFAULT que não é uma restrição de integridade.  Não lembro se cabe
> FOREIGN KEY também.
> 
O problema que vejo em uso de domínio ao invés do tipo é que o
PostgreSQL não se comporta "bem" na transformação domínio <-> tipo em
algumas partes (como planejador, otimizador). Digo isso porque já vi
consultas [sub|super]estimadas com uso de domínios.

>> Não que esteja querendo ser chato, mas esse tipo de entendimento é
>> importante inclusive para o nosso VP.
> 
Claro, mas em todas as traduções do PostgreSQL utilizamos restrição. ;)
Vou adicionar como segunda opção.

> Hm, na verdade o nosso elefante está ficando mais estrito, impedindo
> operações que antes eram toleradas… o que ilustra como deve funcionar:
> a restrição para comparação deveria ser implícita na própria definição
> dos tipos.
> 
Tenho que discordar neste ponto. O principal ponto de remover algumas
comparações implícitas (com tipo text) na 8.3 [1] foi o retorno de
resultados inesperados com o PostgreSQL fazendo suposições erradas (vide
 comentários no capítulo de conversão (aka 'casting') entre tipos em
manuais de linguagens de programação interpretada).

> Há algum tempo vi a documentação e me pareceu extremamente complicada.
>  Revi agora: ou fiquei menos burro, ou está mais simples mesmo.  Mesmo
> assim, não me pareceu prático o suficiente para uso generalizado;
> talvez eu precisasse dum bom tutorial para ser iluminado.
> 
Sim, na verdade era bem mais complicado criar um tipo. A implementação
melhorou bastante.

> Talvez você tenha exemplos melhores que a da documentação, com
> restrições e tudo o mais?  Ou realmente o caminho seria um combinação
> de tipos e DOMAINs?  Adoro como o ISO SQL confunde os conceitos… :-(
> 
Exemplos de CREATE TYPE? No contrib está cheio de exemplos. Vale
ressaltar que a implementação CREATE TYPE do PostgreSQL não tem nada a
ver com a definida no ISO SQL (dá pra adivinhar o porquê, né?).

Leo, e sobre a criação de tipos base com CREATE TYPE. Como você quer
fazer a restrição (contenção)? cláusula INPUT fazendo a verificação
dentro da função foo_in()?


[1] http://archives.postgresql.org/pgsql-committers/2007-06/msg00071.php


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a