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
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.