O catálogo pg_type armazena informações sobre tipos de dado. Os tipos base (tipos escalares) são criados pelo comando CREATE TYPE, e os domínios pelo comando CREATE DOMAIN. Para cada tabela do banco de dados é criado, automaticamente, um tipo composto para representar a estrutura da linha da tabela. Também é possível criar tipos compostos utilizando o comando CREATE TYPE AS.
Tabela 42-30. Colunas de pg_type
Nome | Tipo | Referencia | Descrição |
---|---|---|---|
typname | name | Nome do tipo de dado | |
typnamespace | oid | pg_namespace.oid | OID do espaço de nomes que contém este tipo. |
typowner | int4 | pg_shadow.usesysid | Dono do tipo |
typlen | int2 | Para um tipo de tamanho fixo, typlen é o número de bytes na representação interna do tipo. Para um tipo de tamanho variável, typlen é negativo. -1 indica um tipo "varlena" (aquele que tem a palavra comprimento), -2 indica uma cadeia de caracteres C terminada por nulo. | |
typbyval | bool | typbyval determina se as rotinas internas passam o valor deste tipo por valor ou por referência. É melhor typbyval ser falso se typlen não for igual a 1, 2 ou 4 (ou 8 nas máquinas com Datum igual a 8 bytes). Os tipos de comprimento variável são sempre passados por referência. Deve ser observado que typbyval pode ser falso mesmo quando o comprimento permite passar por valor; atualmente isto é verdade para o tipo float4, por exemplo. | |
typtype | char | typtype é igual a b para um tipo base, igual a c para um tipo composto (ou seja, o tipo de uma linha de tabela), igual a d para um domínio, ou igual a p para um pseudotipo. Consulte também typrelid e typbasetype. | |
typisdefined | bool | Verdade se o tipo estiver definido, falso se for uma entrada para guardar lugar para um tipo que ainda não está definido. Quando typisdefined for falso, não se poderá confiar em nada além do nome do tipo, espaço de nomes e OID. | |
typdelim | char | Caractere que separa dois valores deste tipo ao analisar entrada na forma de matriz. Deve ser observado que o delimitador está associado ao tipo de dado do elemento, e não ao tipo de dado da matriz | |
typrelid | oid | pg_class.oid | Se for um tipo composto (consulte typtype), então esta coluna aponta para a entrada em pg_class que define a tabela correspondente (Para um tipo composto independente, a entrada em pg_class não representa realmente uma tabela, mas de todo jeito é necessária para as entradas em pg_attribute do tipo fazerem ligação). Zero para os tipos não-compostos. |
typelem | oid | pg_type.oid | Se typelem não for 0, então identifica outra linha em pg_type. O tipo corrente pode ser acessado como qualquer matriz produzindo valores do tipo typelem. Um tipo matriz "de verdade" é de comprimento variável (typlen = -1), mas alguns tipos de comprimento fixo (typlen > 0) também possuem typelem diferente de zero como, por exemplo, name e oidvector. Se um tipo de comprimento fixo possui typelem, então sua representação interna deve ser alguma quantidade de valores do tipo de dado typelem com nenhum outro dado. Os tipos matriz de comprimento variável possuem um cabeçalho definido pelas subrotinas da matriz. |
typinput | regproc | pg_proc.oid | Função de conversão da entrada (formato texto) |
typoutput | regproc | pg_proc.oid | Função de conversão da saída (formato texto) |
typreceive | regproc | pg_proc.oid | Função de conversão da entrada (formato binário), ou 0 se nenhuma |
typsend | regproc | pg_proc.oid | Função de conversão da saída (formato binário), ou 0 se nenhuma |
typanalyze | regproc | pg_proc.oid | Função ANALYZE personalizada, ou 0 para utilizar a função padrão |
typalign | char |
typalign é o alinhamento requerido para armazenar um valor deste tipo. Se aplica ao armazenamento em disco, assim como a maioria das representações do valor dentro do PostgreSQL. Quando vários valores são armazenados consecutivamente, tal como na representação de uma linha completa no disco, é inserido um preenchimento antes do dado deste tipo para que comece na fronteira especificada. A referência de alinhamento é o início do primeiro dado na seqüência. Os valores possíveis são:
|
|
typstorage | char |
typstorage informa para os tipos varlena (aqueles com typlen = -1) se o tipo está preparado para o fatiamento (toasting), e qual deve ser a estratégia padrão para os atributos deste tipo. Os valores possíveis são:
Deve ser observado que as colunas do tipo m também podem ser movidas para o armazenamento secundário, mas somente como último recurso (Primeiro são movidas as colunas do tipo e e do tipo x). |
|
typnotnull | bool |
typnotnull representa uma restrição de não-nulo no tipo. Utilizado apenas em domínios. |
|
typbasetype | oid | pg_type.oid |
Se for um domínio (consulte typtype), então typbasetype identifica o tipo em que é baseado. Zero se não for um domínio. |
typtypmod | int4 |
Os domínios utilizam typtypmod para registrar o typmod a ser aplicado ao seu tipo base (-1 se o tipo base não utilizar um typmod). -1 se este tipo não for um domínio. |
|
typndims | int4 |
typndims é o número de dimensões da matriz para o domínio que é uma matriz (ou seja, typbasetype é um tipo matriz; o typelem do domínio corresponde ao tipo base de typelem). Zero para os tipos que não forem domínios matriz. |
|
typdefaultbin | text |
Se typdefaultbin não for nulo, é a representação nodeToString() da expressão padrão para o tipo. Utilizado apenas para domínios. |
|
typdefault | text |
typdefault é nulo se o tipo não tiver valor padrão associado. Se typdefaultbin não for nulo, typdefault deve conter uma versão humanamente legível da expressão padrão representada por typdefaultbin. Se typdefaultbin for nulo e typdefault não for, então typdefault é a representação externa do valor padrão do tipo, o qual pode ser introduzido no conversor de entrada do tipo para produzir uma constante. |