52.64. pg_type #

O catálogo pg_type armazena informações sobre tipos de dados. Tipos de dados base e tipos de dados enum (tipos escalares) são criados com CREATE TYPE, e domínios com CREATE DOMAIN. Um tipo de dados composto é criado automaticamente para cada tabela no banco de dados, para representar a estrutura das linhas da tabela. Também é possível criar tipos de dados compostos com CREATE TYPE AS.

Tabela 52.64. Colunas de pg_type

Coluna Tipo de dados

Descrição

oid oid

Identificador da linha

typname name

Nome do tipo de dados

typnamespace oid (referencia pg_namespace.oid)

OID do espaço de nomes que contém este tipo de dados

typowner oid (referencia pg_authid.oid)

Dono do tipo de dados

typlen int2

Para um tipo de dados de tamanho fixo, typlen é o número de bytes na representação interna do tipo de dados. Mas para um tipo de dados de comprimento variável, typlen é negativo. -1 indica um tipo de dados varlena (aquele que tem uma palavra de comprimento), -2 indica uma cadeia de caracteres C terminada em nulo.

typbyval bool

typbyval determina se as rotinas internas passam o valor desse tipo de dados por valor ou por referência. typbyval é melhor que seja falso se typlen não for 1, 2, ou 4 (ou 8 em máquinas onde o Datum é de 8 bytes). Tipos de dados de comprimento variável são sempre passados ​​por referência. Note que typbyval pode ser falso mesmo que o comprimento permita passagem por valor.

typtype char

typtype é b para um tipo de dados de base, c para um tipo de dados composto (por exemplo, o tipo de linha de uma tabela), d para um domínio, e para um tipo de dados enum, p para um pseudo-tipo de dados, r para um tipo de dados de intervalo, ou m para um tipo de dados multi-intervalo. Veja também typrelid e typbasetype.

typcategory char

typcategory é uma classificação arbitrária de tipos de dados usada pelo analisador para determinar quais conversões implícitas devem ser preferidas. Veja Tabela 52.65.

typispreferred bool

Verdade se o tipo de dados for um destino preferencial de conversão dentro de seu typcategory

typisdefined bool

Verdade se o tipo de dados estiver definido, falso se esta for uma entrada de espaço reservado para um tipo de dados ainda não definido. Quando typisdefined for falso, nada, exceto o nome do tipo de dados, o espaço de nomes e o OID, pode ser confiável.

typdelim char

Caractere que separa dois valores desse tipo de dados ao analisar a entrada de uma matriz. Note que o delimitador está associado ao tipo de dados do elemento da matriz, e não ao tipo de dados da matriz.

typrelid oid (referencia pg_class.oid)

Se for um tipo de dados composto (veja typtype), então esta coluna irá apontar para a entrada em pg_class que define a tabela correspondente. (Para um tipo de dados composto independente, a entrada em pg_class não representa realmente uma tabela, mas é necessário de qualquer forma para as entradas em pg_attribute do tipo de dados para vincular.) Zero para tipos de dados não compostos.

typsubscript regproc (referencia pg_proc.oid)

OID da função tratadora de indexação, ou zero se este tipo de dados não der suporte a indexação. Tipos de dados que são tipos matriz verdadeiros têm typsubscript = array_subscript_handler, mas outros tipos de dados podem ter outras funções tratadoras para implementar comportamento de indexação especializado.

typelem oid (referencia pg_type.oid)

Se typelem não for zero, identifica outra linha em pg_type, definindo o tipo de dados produzido pela indexação. Deverá ser zero se typsubscript for zero. Entretanto, pode ser zero quando typsubscript não é zero, se o tratador não precisar de typelem para determinar o tipo de dados de resultado da indexação. Note que uma dependência typelem é considerada como implicando contenção física do tipo de dados do elemento neste tipo de dados; portanto, as alterações de DDL no tipo de dados de elemento podem ser restritas pela presença desse tipo de dados.

typarray oid (referencia pg_type.oid)

Se typarray não for zero, identifica outra linha em pg_type que é o verdadeiro tipo de dados matriz tendo este tipo de dados como elemento

typinput regproc (referencia pg_proc.oid)

Função de conversão da entrada (formato texto)

typoutput regproc (referencia pg_proc.oid)

Função de conversão da saída (formato texto)

typreceive regproc (referencia pg_proc.oid)

Função de conversão da entrada (formato binário), ou zero se nenhuma

typsend regproc (referencia pg_proc.oid)

Função de conversão da saída (formato binário), ou zero se nenhuma

typmodin regproc (referencia pg_proc.oid)

Função de entrada do modificador do tipo de dados, ou zero se o tipo de dados não oferecer suporte a modificadores

typmodout regproc (referencia pg_proc.oid)

Função de saída do modificador do tipo de dados, ou zero para usar o formato padrão

typanalyze regproc (referencia pg_proc.oid)

Função ANALYZE personalizada, ou zero para usar a função padrão

typalign char

typalign é o alinhamento requerido ao armazenar um valor desse tipo de dados. Aplica-se ao armazenamento em disco, bem como à maioria das representações do valor interno no PostgreSQL. Quando vários valores são armazenados consecutivamente, como na representação de uma linha completa no disco, o preenchimento é inserido antes de um dado desse tipo de dados para que ele comece no limite especificado. A referência de alinhamento é o início do primeiro dado na sequência. Os valores possíveis são:

  • c = alinhamento char, ou seja, nenhum alinhamento é necessário.

  • s = alinhamento short (2 bytes na maioria das máquinas).

  • i = alinhamento int (4 bytes na maioria das máquinas).

  • d = alinhamento double (8 bytes na maioria das máquinas, mas de forma alguma em todas).

typstorage char

typstorage informa para tipos de dados varlena (aqueles com typlen = -1) se o tipo de dados está preparado para TOAST, e qual deve ser a estratégia padrão para atributos desse tipo de dados. Os valores possíveis são:

  • p (plain): Os valores devem ser sempre armazenados de forma pura (tipos de dados não varlena sempre usam este valor).

  • e (external): Os valores podem ser armazenados em uma relação secundária TOAST (se a relação tiver uma, veja pg_class.reltoastrelid).

  • m (main): Os valores podem ser comprimidos e armazenados em-linha.

  • x (extended): Os valores podem ser comprimidos e/ou movidos para uma relação secundária.

x é a escolha usual para aqueles tipos de dados que podem ser TOAST-ados. Note que os valores m também podem ser movidos para o armazenamento secundário, mas apenas como último recurso (os valores e e x são movidos primeiro).

typnotnull bool

typnotnull representa uma restrição de não-nulo em um tipo de dados. Usado somente para domínios.

typbasetype oid (referencia pg_type.oid)

Se for um domínio (veja typtype), então typbasetype irá identificar o tipo de dados no qual ele se baseia. Zero se o tipo de dados não for um domínio.

typtypmod int4

Os domínios usam typtypmod para registrar o typmod a ser aplicado ao seu tipo de dados base (-1 se o tipo de dados base não usar typmod). -1 se o tipo de dados não for um domínio.

typndims int4

typndims é o número de dimensões da matriz para um domínio sobre uma matriz (ou seja, typbasetype é um tipo de dados matriz). Zero para tipos de dados diferentes de domínios sobre tipos de dados matriz.

typcollation oid (referencia pg_collation.oid)

typcollation especifica a ordenação do tipo de dados. Se o tipo de dados não der suporte a ordenações, será zero. Um tipo de dados base que der suporte a ordenações terá um valor diferente de zero aqui, normalmente DEFAULT_COLLATION_OID. Um domínio sobre um tipo de dados ordenável pode ter um OID de ordenação diferente do seu tipo de dados base, se algum tiver sido especificado para o domínio.

typdefaultbin pg_node_tree

Se typdefaultbin não for nulo, este campo será a representação nodeToString() da expressão padrão para o tipo de dados. Só é usado para domínios.

typdefault text

typdefault será nulo se o tipo de dados não tiver valor padrão associado. Se typdefaultbin não for nulo, typdefault deverá conter uma versão legível por humanos da expressão padrão representada por typdefaultbin. Se typdefaultbin for nulo e typdefault não for, então typdefault será a representação externa do valor padrão do tipo de dados, que pode ser enviado ao conversor de entrada do tipo de dados para produzir uma constante.

typacl aclitem[]

Privilégios de acesso; veja Privilégios para obter detalhes


Nota

Para tipos de dados de largura fixa usados ​​em tabelas de sistema, é essencial que o tamanho e o alinhamento definidos em pg_type estejam conforme a maneira como o compilador irá dispor a coluna em uma estrutura que representa uma linha de tabela.

A Tabela 52.65 lista os valores de typcategory definidos pelo sistema. Quaisquer adições futuras a esta lista também serão letras ASCII maiúsculas. Todos os outros caracteres ASCII são reservados para categorias definidas pelo usuário.

Tabela 52.65. Códigos de typcategory

CódigoCategoria
ATipos matriz
BTipos booleanos
CTipos compostos
DTipos data/hora
ETipos enum
GTipos geométricos
ITipos endereço de rede
NTipos numéricos
PPseudo-tipos
RTipos intervalo
STipos cadeia de caracteres
TTipos intervalo de tempo
UTipos definidos pelo usuário
VTipos cadeia de bits
XTipo unknown (desconhecido)
ZTipos de uso interno