35.24. element_types #

A visão element_types contém os descritores do tipo de dados dos elementos das matrizes. Quando uma coluna de tabela, atributo de tipo de dados composto, domínio, parâmetro de função, ou valor retornado pela função, é definido como sendo do tipo de dados matriz, a respectiva visão do esquema de informações contém apenas ARRAY na coluna data_type. Para obter informações sobre o tipo de dados dos elementos da matriz, pode-se juntar a respectiva visão com esta visão. Por exemplo, para mostrar as colunas de uma tabela com os tipos de dados da coluna e dos elementos da matriz, se aplicável, pode-se executar:

SELECT c.column_name, c.data_type, e.data_type AS element_type
FROM information_schema.columns c
     LEFT JOIN information_schema.element_types e
     ON ((c.table_catalog, c.table_schema, c.table_name, '
          TABLE', c.dtd_identifier)
       = (e.object_catalog, e.object_schema, e.object_name,
          e.object_type, e.collection_type_identifier))
WHERE c.table_schema = '...' AND c.table_name = '...'
ORDER BY c.ordinal_position;

Esta visão inclui apenas objetos aos quais o usuário corrente tem acesso, por ser o dono ou por ter algum privilégio.

Tabela 35.22. Colunas de element_types

Coluna Tipo de dados

Descrição

object_catalog sql_identifier

Nome do banco de dados que contém o objeto que utiliza a matriz descrita (sempre o banco de dados corrente)

object_schema sql_identifier

Nome do esquema que contém o objeto que usa a matriz sendo descrita

object_name sql_identifier

Nome do objeto que utiliza a matriz sendo descrita

object_type character_data

O tipo do objeto que usa a matriz sendo descrita: um entre TABLE (a matriz é usada por uma coluna dessa tabela), USER-DEFINED TYPE (a matriz é usada por um atributo desse tipo de dados composto), DOMAIN (a matriz é usada por este domínio), ROUTINE (a matriz é usada por um parâmetro ou pelo tipo de dados retornado por esta função)

collection_type_identifier sql_identifier

O identificador do descritor do tipo de dados da matriz sendo descrita. Serve para realizar a junção com as colunas dtd_identifier de outras visões do esquema de informações.

data_type character_data

Tipo de dados dos elementos da matriz, se for um tipo nativo, caso contrário, USER-DEFINED (neste caso, o tipo de dados é identificado pela coluna udt_name e nas colunas associadas)

character_maximum_length cardinal_number

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

character_octet_length cardinal_number

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

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 do tipo de dados do elemento (sempre o banco de dados corrente), nula se o valor padrão ou o tipo de dados do elemento não puder ser ordenado

collation_schema sql_identifier

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

collation_name sql_identifier

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

numeric_precision cardinal_number

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

numeric_precision_radix cardinal_number

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

numeric_scale cardinal_number

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

datetime_precision cardinal_number

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

interval_type character_data

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

interval_precision cardinal_number

Sempre nula, porque esta informação não se aplica a tipos de dados de elementos de matriz no PostgreSQL

udt_catalog sql_identifier

Nome do banco de dados onde o tipo de dados dos elementos está definido (sempre o banco de dados corrente)

udt_schema sql_identifier

Nome do esquema em que o tipo de dados dos elementos está definido

udt_name sql_identifier

Nome do tipo de dados dos elementos

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 do elemento. No momento, não é útil.


Exemplo 35.21. Exemplo do tradutor

Descritores do tipo de dados dos elementos das matrizes

Uso do esquema de informações para mostrar os descritores do tipo de dados dos elementos das matrizes do objeto jogo_da_velha no banco de dados cristina da usuária cristina.

CREATE TABLE jogo_da_velha (
    tabuleiro   integer[3][3]
);
CREATE TABLE
SELECT object_catalog, object_schema, object_name , object_type,
       collection_type_identifier, data_type,
       udt_catalog, udt_schema, udt_name, dtd_identifier
FROM information_schema.element_types
WHERE object_name = 'jogo_da_velha'\gx

-[ RECORD 1 ]--------------+--------------
object_catalog             | cristina
object_schema              | public
object_name                | jogo_da_velha
object_type                | TABLE
collection_type_identifier | 1
data_type                  | integer
udt_catalog                | cristina
udt_schema                 | pg_catalog
udt_name                   | int4
dtd_identifier             | a1


Exemplo 35.22. Exemplo do tradutor

Colunas da tabela com os tipos de dados da coluna e dos elementos da matriz

Uso do esquema de informações para mostrar as colunas da tabela jogo_da_velha com os tipos de dados da coluna e dos elementos da matriz no banco de dados cristina da usuária cristina através da junção da visão columns com a visão element_types.

SELECT c.table_name, c.column_name, c.data_type, e.data_type AS element_type
FROM information_schema.columns c
     LEFT JOIN information_schema.element_types e
     ON ((c.table_catalog, c.table_schema, c.table_name,
          'TABLE', c.dtd_identifier)
       = (e.object_catalog, e.object_schema, e.object_name,
          e.object_type, e.collection_type_identifier))
WHERE c.table_schema = 'public' AND c.table_name = 'jogo_da_velha';

  table_name   | column_name | data_type | element_type
---------------+-------------+-----------+--------------
 jogo_da_velha | tabuleiro   | ARRAY     | integer
(1 linha)