Os valores a serem inseridos na tabela são convertidos no tipo de dado da coluna de destino de acordo com as seguintes etapas.
Conversão de tipo para armazenamento de valor
Verificar a correspondência exata com o destino.
Senão, tentar converter a expressão no tipo de dado de destino. Isto será bem-sucedido se houver uma conversão registrada entre os dois tipos. Se a expressão for um literal de tipo desconhecido, o conteúdo do literal cadeia de caracteres será enviado para a rotina de conversão de entrada do tipo de destino.
Verificar se existe uma conversão de tamanho para o tipo de destino. Uma conversão de tamanho é uma conversão do tipo para o próprio tipo. Se for encontrada alguma no catálogo pg_cast aplicá-la à expressão antes de armazenar na coluna de destino. A função que implementa este tipo de conversão sempre aceita um parâmetro adicional do tipo integer, que recebe o comprimento declarado da coluna de destino (na verdade, seu valor atttypmod; a interpretação de atttypmod varia entre tipos de dado diferentes). A função de conversão é responsável por aplicar toda semântica dependente do comprimento, tal como verificação do tamanho ou truncamento.
Exemplo 10-6. Conversão de tipo no armazenamento de character
Para uma coluna de destino declarada como character(20), a seguinte declaração garante que o valor armazenado terá o tamanho correto:
=> CREATE TABLE vv (v character(20)); => INSERT INTO vv SELECT 'abc' || 'def'; => SELECT v, length(v) FROM vv; v | length ----------------------+-------- abcdef | 20 (1 linha)
O que acontece realmente aqui, é que os dois literais desconhecidos são resolvidos como text por padrão, permitindo que o operador || seja resolvido como concatenação de text. Depois, o resultado text do operador é convertido em bpchar ("caractere completado com brancos", ou "blank-padded char", que é o nome interno do tipo de dado character) para corresponder com o tipo da coluna de destino (Uma vez que os tipos text e bpchar são binariamente compatíveis, esta conversão não insere nenhuma chamada real de função). Por fim, 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 espaços para completar.