35.17. columns #

A visão columns contém informações sobre todas as colunas de tabela (ou colunas de visão) no banco de dados. As colunas do sistema (ctid, etc.) não estão incluídas. Somente são mostradas as colunas para as quais o usuário corrente tem acesso (por ser o dono ou ter algum privilégio).

Tabela 35.15. Colunas de columns

Coluna Tipo de dados

Descrição

table_catalog sql_identifier

Nome do banco de dados que contém a tabela (sempre o banco de dados corrente)

table_schema sql_identifier

Nome do esquema que contém a tabela

table_name sql_identifier

Nome da tabela

column_name sql_identifier

Nome da coluna

ordinal_position cardinal_number

Posição ordinal da coluna na tabela (contado a partir de 1)

column_default character_data

Expressão padrão da coluna

is_nullable yes_or_no

YES se a coluna for possivelmente nula, NO se for conhecido que não pode ser nula. Uma restrição de não-nulo é uma maneira pela qual uma coluna pode ser conhecida como não podendo ser nula, mas podem haver outras.

data_type character_data

Tipo de dados da coluna, se for um tipo de dados integrado, ou ARRAY se for uma matriz (neste caso, veja a visão element_types), caso contrário USER-DEFINED (neste caso, o tipo de dados é identificado na coluna udt_name e nas colunas associadas). Se a coluna for baseada em um domínio, esta coluna irá se referir ao tipo de dados subjacente do domínio (e o domínio será identificado na coluna domain_name e nas colunas associadas).

character_maximum_length cardinal_number

Se a coluna data_type identificar um tipo de dados de cadeia de caracteres ou de bits, esta coluna irá conter o comprimento máximo declarado; para todos os outros tipos de dados, ou se não foi declarado nenhum comprimento máximo, será nula.

character_octet_length cardinal_number

Se a coluna data_type identificar um tipo de dados de caractere, irá conter o comprimento máximo possível em octetos (bytes) do Datum; será nula para todos os demais tipos de dados. O comprimento máximo do octeto depende do comprimento máximo do caractere declarado (veja acima) e da codificação do servidor.

numeric_precision cardinal_number

Se a coluna data_type identificar um tipo de dados numérico, esta coluna irá conter a precisão (declarada ou implícita) do tipo de dados para esta coluna. A precisão indica o número de dígitos significativos. Pode ser expresso em termos decimais (base 10) ou binários (base 2), conforme especificado na coluna numeric_precision_radix. Para todos os outros tipos de dados, esta coluna será nula.

numeric_precision_radix cardinal_number

Se a coluna data_type identificar um tipo de dados numérico, esta coluna irá indicar em qual base os valores das colunas numeric_precision e numeric_scale são expressos. O valor é 2 ou 10. Para todos os outros tipos de dados, esta coluna será nula.

numeric_scale cardinal_number

Se a coluna data_type identificar um tipo de dados numérico exato, esta coluna irá conter a escala (declarada ou implícita) do tipo de dados para esta coluna. A escala indica o número de dígitos significativos à direita do ponto decimal. Pode ser expresso em termos decimais (base 10) ou binários (base 2), conforme especificado na coluna numeric_precision_radix. Para todos os outros tipos de dados, esta coluna será nula.

datetime_precision cardinal_number

Se a coluna data_type identificar uma data, hora, carimbo de data/hora ou tipo de dados de intervalo, esta coluna irá conter a precisão dos segundos fracionários (declarados ou implícitos) do tipo de dados para esta coluna, ou seja, o número de dígitos decimais mantidos após o ponto decimal no valor dos segundos. Para todos os outros tipos de dados, esta coluna será nula.

interval_type character_data

Se a coluna data_type identificar um tipo de dados de intervalo, esta coluna irá conter a especificação de quais campos os intervalos incluem para esta coluna, por exemplo, YEAR TO MONTH, DAY TO SECOND, etc. Se não tiver sido especificada nenhuma restrição de campo (ou seja, o intervalo aceita todos os campos), e para todos os outros tipos de dados, esta coluna será nula.

interval_precision cardinal_number

Aplica-se a uma funcionalidade não disponível no PostgreSQL (veja datetime_precision para obter a precisão dos segundos fracionários das colunas do tipo de dados de intervalo)

character_set_catalog sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

character_set_schema sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

character_set_name sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

collation_catalog sql_identifier

Nome do banco de dados que contém a ordenação da coluna (sempre o banco de dados corrente), ou será nula se o valor padrão ou o tipo de dados da coluna não for ordenável

collation_schema sql_identifier

Nome do esquema que contém a ordenação da coluna, ou será nula se o valor padrão ou o tipo de dados da coluna não for ordenável

collation_name sql_identifier

Nome da ordenação da coluna, ou será nula se o valor padrão ou o tipo de dados da coluna não for ordenável

domain_catalog sql_identifier

Se a coluna tiver um tipo de dados de domínio, o nome do banco de dados onde o domínio está definido (sempre o banco de dados corrente), caso contrário será nula.

domain_schema sql_identifier

Se a coluna tiver um tipo de dados de domínio, o nome do esquema onde o domínio está definido, caso contrário será nula.

domain_name sql_identifier

Se a coluna tiver um tipo de dados de domínio, o nome do domínio, caso contrário será nula.

udt_catalog sql_identifier

Nome do banco de dados onde o tipo de dados da coluna (o tipo de dados subjacente do domínio, se aplicável) está definido (sempre o banco de dados corrente)

udt_schema sql_identifier

Nome do esquema onde o tipo de dados da coluna (o tipo de dados subjacente do domínio, se aplicável) está definido

udt_name sql_identifier

Nome do tipo de dados da coluna (o tipo de dados subjacente do domínio, se aplicável)

scope_catalog sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

scope_schema sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

scope_name sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

maximum_cardinality cardinal_number

Sempre nula, porque as matrizes sempre têm cardinalidade máxima ilimitada no PostgreSQL

dtd_identifier sql_identifier

Identificador do descritor de tipo de dados da coluna, único entre os descritores de tipo de dados pertencentes à tabela. Serve principalmente para realizar junções com outras instâncias desses identificadores. (O formato específico do identificador não está definido, não havendo garantia de que irá permanecer o mesmo em versões futuras.)

is_self_referencing yes_or_no

Aplica-se a uma funcionalidade não disponível no PostgreSQL

is_identity yes_or_no

Se a coluna for uma coluna de identidade, então será YES, caso contrário NO.

identity_generation character_data

Se a coluna for uma coluna de identidade, então será ALWAYS ou BY DEFAULT, refletindo a definição da coluna.

identity_start character_data

Se a coluna for uma coluna de identidade, então será o valor inicial da sequência interna, caso contrário será nula.

identity_increment character_data

Se a coluna for uma coluna de identidade, então será o incremento da sequência interna, caso contrário será nula.

identity_maximum character_data

Se a coluna for uma coluna de identidade, então será o valor máximo da sequência interna, caso contrário será nula.

identity_minimum character_data

Se a coluna for uma coluna de identidade, então será o valor mínimo da sequência interna, caso contrário será nula.

identity_cycle yes_or_no

Se a coluna for uma coluna de identidade, então será YES se a sequência interna for cíclica, ou NO se não for; caso contrário será nula.

is_generated character_data

Se a coluna for uma coluna gerada, então será ALWAYS, senão será NEVER.

generation_expression character_data

Se a coluna for uma coluna gerada, então será a expressão de geração, caso contrário será nula.

is_updatable yes_or_no

YES se a coluna for atualizável, NO caso contrário. (As colunas nas tabelas-base são sempre atualizáveis, as colunas nas visões não necessariamente)


Como os tipos de dados podem ser definidos de diversas maneiras no padrão SQL, e o PostgreSQL contém maneiras adicionais para definir tipos de dados, sua representação no esquema de informações pode ser um tanto difícil. A coluna data_type deve identificar o tipo de dados integrado subjacente da coluna. No PostgreSQL, isto significa que o tipo de dados é definido no esquema do catálogo do sistema pg_catalog. Esta coluna poderá ser útil se a aplicação puder lidar com tipos de dados integrados bem conhecidos de forma especial (por exemplo, formatando os tipos de dados numéricos de maneira diferente, ou usando os dados das colunas de precisão). As colunas udt_name, udt_schema e udt_catalog sempre identificam o tipo de dados subjacente da coluna, mesmo que a coluna seja baseada em um domínio. (Como o PostgreSQL trata os tipos de dados integrados como os tipos de dados definidos pelo usuário, os tipos de dados integrados também aparecem aqui. Esta é uma extensão ao padrão SQL.) Estas colunas devem ser utilizadas caso uma aplicação queira processar os dados de forma diferente conforme o tipo de dados, porque neste caso não irá importar se a coluna é, na verdade, baseada em um domínio. Se a coluna for baseada em um domínio, a identidade do domínio será armazenada nas colunas domain_name, domain_schema, e domain_catalog. Se for desejado parear as colunas com seus tipos de dados associados e tratar os domínios como tipos de dados separados, pode-se escrever coalesce(domain_name, udt_name), etc.

Exemplo 35.14. Exemplo do tradutor

Colunas da tabela pessoa

Uso do esquema de informações para mostrar todas as colunas da tabela pessoa da usuária cristina no banco de dados cristina. Veja a criação da tabela em Exemplo da visão column_column_usage.

SELECT table_catalog, table_schema, table_name, column_name,
       ordinal_position, is_identity,is_nullable,
       data_type, is_generated, generation_expression
FROM information_schema.columns
WHERE table_name='pessoa'
ORDER BY ordinal_position\gx

-[ RECORD 1 ]---------+--------------------------
table_catalog         | cristina
table_schema          | public
table_name            | pessoa
column_name           | id
ordinal_position      | 1
is_identity           | NO
is_nullable           | NO
data_type             | integer
is_generated          | NEVER
generation_expression |
-[ RECORD 2 ]---------+--------------------------
table_catalog         | cristina
table_schema          | public
table_name            | pessoa
column_name           | nome
ordinal_position      | 2
is_identity           | NO
is_nullable           | YES
data_type             | text
is_generated          | NEVER
generation_expression |
-[ RECORD 3 ]---------+--------------------------
table_catalog         | cristina
table_schema          | public
table_name            | pessoa
column_name           | altura_cm
ordinal_position      | 3
is_identity           | NO
is_nullable           | YES
data_type             | numeric
is_generated          | NEVER
generation_expression |
-[ RECORD 4 ]---------+--------------------------
table_catalog         | cristina
table_schema          | public
table_name            | pessoa
column_name           | peso_kg
ordinal_position      | 4
is_identity           | NO
is_nullable           | YES
data_type             | numeric
is_generated          | NEVER
generation_expression |
-[ RECORD 5 ]---------+--------------------------
table_catalog         | cristina
table_schema          | public
table_name            | pessoa
column_name           | altura_inch
ordinal_position      | 5
is_identity           | NO
is_nullable           | YES
data_type             | numeric
is_generated          | ALWAYS
generation_expression | (altura_cm / 2.54)
-[ RECORD 6 ]---------+--------------------------
table_catalog         | cristina
table_schema          | public
table_name            | pessoa
column_name           | peso_pound
ordinal_position      | 6
is_identity           | NO
is_nullable           | YES
data_type             | numeric
is_generated          | ALWAYS
generation_expression | (peso_kg * 2.20462262185)