7.4. Destino dos comandos

Os valores a ser inseridos na tabela são transformados no tipo de dado da coluna de destino, de acordo com as seguintes etapas.

Determinação do tipo em destino de comando

  1. Verificar a correspondência exata com o destino.

  2. Senão, tentar transformar a expressão no tipo de dado do destino. Isto será bem sucedido se os dois tipos forem sabidamente binariamente compatíveis, ou se houver uma função de conversão. Se a expressão for um literal de tipo desconhecido, o conteúdo da cadeia de caracteres literal será colocado na rotina de conversão de entrada para o tipo de destino.

  3. Se o destino for de um tipo de comprimento fixo (por exemplo, char ou varchar declarado com comprimento) então tentar encontrar uma função de tamanho para o tipo de dado do destino. Uma função de tamanho é uma função com o mesmo nome do tipo recebendo dois argumentos, sendo que o primeiro é deste tipo e o segundo é um inteiro, e retorna o mesmo tipo. Se alguma for encontrada, esta é aplicada, passando o comprimento declarado da coluna como o segundo parâmetro.

Exemplo 7-6. Conversão de tipo de armazenamento character

Para uma coluna de destino declarada como character(20) a seguinte consulta garante que o destino terá o tamanho correto:

tgl=> CREATE TABLE vv (v character(20));
CREATE
tgl=> INSERT INTO vv SELECT 'abc' || 'def';
INSERT 392905 1
tgl=> SELECT v, length(v) FROM vv;
          v           | length
----------------------+--------
 abcdef               |     20
(1 row)

O que acontece realmente é que as duas literais desconhecidas são resolvidas como text por padrão, permitindo que o operador || seja resolvido como concatenação de text. Então o resultado text do operador é transformado em bpchar (caractere preenchido com brancos, ou "blank-padded char", que é o nome interno do tipo de dado caractere) para corresponder ao tipo da coluna de destino (Uma vez que o analisador sabe que text e bpchar são binariamente compatíveis, esta transformação é implícita e não insere na realidade nenhuma chamada de função). Finalmente, a função de tamanho bpchar(bpchar, integer) é encontrada no catálogo do sistema, e aplicada ao resultado do operador e comprimento da coluna armazenada. Esta função específica do tipo realiza a verificação do comprimento requerido e adiciona os espaços de preenchimento.