10.4. Armazenamento de valor

PostgreSQL 14.5: Armazenamento de valor

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

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

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

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

SourceForge.net Logo CSS válido!