52.10. pg_cast #

O catálogo pg_cast armazena caminhos de conversão de tipo de dados, tanto nativos quanto definidos pelo usuário.

Deve-se notar que pg_cast não representa todas as conversões de tipo de dados que o sistema sabe realizar, mas somente aquelas que não podem ser deduzidas de alguma regra genérica. Por exemplo, a conversão entre um domínio e seu tipo de dados base não é representada explicitamente em pg_cast. Outra exceção importante é que as conversões automáticas de E/S, aquelas executadas usando as próprias funções de E/S do tipo de dados para converter de ou para text, ou outros tipos de cadeia de caracteres, não são representadas explicitamente em pg_cast.

Tabela 52.10. Colunas de pg_cast

Coluna Tipo de dados

Descrição

oid oid

Identificador da linha

castsource oid (referencia pg_type.oid)

OID do tipo de dados de origem

casttarget oid (referencia pg_type.oid)

OID do tipo de dados de destino

castfunc oid (referencia pg_proc.oid)

OID da função a ser usada para realizar esta conversão. Será armazenado zero se o método de conversão não exigir uma função.

castcontext char

Indica em quais contextos a conversão pode ser chamada. e significa que apenas como uma conversão explícita (usando a sintaxe CAST ou ::). a significa implicitamente na atribuição a uma coluna de destino, bem como explicitamente. i significa implicitamente em expressões, assim como nos demais casos.

castmethod char

Indica como a conversão é executada. f significa que é usada a função especificada no campo castfunc. i significa que são usadas as funções de entrada/saída. b significa que os tipos de dados são coercíveis em binário, portanto, não é requerida nenhuma conversão.


As funções de conversão listadas em pg_cast devem considerar sempre o tipo de dados de origem da conversão como seu primeiro tipo de dados de argumento, e retornar o tipo de dados de destino da conversão como seu tipo de dados de resultado. Uma função de conversão pode ter até três argumentos. O segundo argumento, se presente, deve ser do tipo de dados integer; ele recebe o modificador de tipo de dados associado ao tipo de dados de destino, ou -1 se não houver nenhum. O terceiro argumento, se presente, deve ser do tipo de dados boolean; ele recebe true se a conversão for explícita, ou false caso contrário.

É legítimo criar uma entrada em pg_cast na qual os tipos de dados de origem e de destino sejam iguais, se a função associada receber mais de um argumento. Estas entradas representam funções de coerção de comprimento, que forçam valores do tipo de dados a serem legais para um valor modificador de tipo de dados específico.

Quando uma entrada em pg_cast tem tipos de dados de origem e de destino diferentes, e uma função que recebe mais de um argumento, ela representa a conversão de um tipo de dados para outro e a aplicação de uma coerção de comprimento em uma única etapa. Quando não estiver disponível nenhuma entrada desse tipo, a coerção para um tipo de dados que usa um modificador de tipo de dados envolve duas etapas, uma para converter entre tipos de dados e uma segunda para aplicar o modificador.

Exemplo 52.5. Exemplo do tradutor

Tipos de dados de identificador de objeto

Uso do catálogo pg_cast para mostrar os tipos de dados alias para oid, cada um chamado regalguma_coisa.

ana=> SELECT  DISTINCT castsource::regtype::text
ana-> FROM pg_cast
ana-> WHERE castsource::regtype::text LIKE 'reg%'
ana-> ORDER BY 1;

  castsource
---------------
 regclass
 regcollation
 regconfig
 regdictionary
 regnamespace
 regoper
 regoperator
 regproc
 regprocedure
 regrole
 regtype
(11 linhas)


52.10.1. Veja também #

CREATE CAST DROP CAST CREATE TYPE, CREATE FUNCTION,