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 |
|---|
Identificador da linha |
OID do tipo de dados de origem |
OID do tipo de dados de destino |
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. |
Indica em quais contextos a conversão pode ser chamada.
|
Indica como a conversão é executada.
|
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)