columns
La vue columns
contient des informations sur toutes les
colonnes de table (et colonnes de vue) de la base. Les colonnes
système (ctid
, etc.) ne sont pas incluses. Seules les colonnes
auxquelles l'utilisateur a accès (par propriété ou par
privilèges) sont affichées.
Tableau 36.15. Colonnes de columns
Nom | Type de données | Description |
---|---|---|
table_catalog | sql_identifier | Nom de la base de données contenant la table (toujours la base de données courante) |
table_schema | sql_identifier | Nom du schéma contenant la table |
table_name | sql_identifier | Nom de la table |
column_name | sql_identifier | Nom de la colonne |
ordinal_position | cardinal_number | Position de la colonne dans la table (la numérotation commençant à 1) |
column_default | character_data | Expression par défaut de la colonne |
is_nullable | yes_or_no |
YES si la colonne est
NULLable (elle admet une absence de
valeur),
NO dans le cas contraire. La contrainte NOT NULL n'est
pas la seule façon de définir qu'une colonne n'est pas
NULLable.
|
data_type | character_data |
Le type de données de la colonne, s'il s'agit d'un type interne ou
ARRAY s'il s'agit d'un tableau (dans ce cas,
voir la vue element_types ),
USER-DEFINED dans les autres cas (le type est alors identifié
dans udt_name et colonnes associées). Si la
colonne est fondée sur un domaine, cette colonne est une référence au type
sous-jacent du domaine (et le domaine est identifié dans
domain_name et colonnes associées).
|
character_maximum_length | cardinal_number |
Si data_type identifie un type chaîne de caractères
ou chaîne de bits, la longueur maximale déclarée ; NULL pour tous les
autres types de données ou si aucune longueur maximale n'a été déclarée.
|
character_octet_length | cardinal_number |
Si data_type identifie un type caractère, la longueur
maximale en octets (bytes) d'un datum ; NULL pour tous
les autres types de données. La longueur maximale en octets dépend de
la longueur maximum déclarée en caractères (voir ci-dessus) et
l'encodage du serveur.
|
numeric_precision | cardinal_number |
Si data_type identifie un type numérique, cette
colonne contient la précision (déclarée ou implicite) du type pour ce
domaine. La précision indique le nombre de chiffres significatifs.
Elle peut être exprimée en décimal (base 10) ou en binaire (base 2)
comme indiqué dans la colonne
numeric_precision_radix . Pour tous les autres types de
données, la colonne est NULL.
|
numeric_precision_radix | cardinal_number |
Si data_type identifie un type numérique, cette
colonne indique dans quelle base les valeurs des colonnes
numeric_precision et
numeric_scale sont exprimées. La valeur est 2
ou 10. Pour tous les autres types de données, cette colonne est NULL.
|
numeric_scale | cardinal_number |
Si data_type identifie un type numeric exact,
cette colonne contient l'échelle (déclarée ou implicite) du type pour ce
domaine. L'échelle indique le nombre de chiffres significatifs à la
droite du point décimal. Elle peut être exprimée en décimal (base 10)
ou en binaire (base 2), comme indiqué dans la colonne
numeric_precision_radix . Pour tous les autres types de
données, cette colonne est NULL.
|
datetime_precision | cardinal_number |
Si data_type identifie une date, une heure, un
horodatage ou un interval, cette colonne contient la précision en
secondes (déclarée ou implicite) pour cet attribut, c'est-à-dire le
nombre de chiffres décimaux suivant le point décimal de la valeur
en secondes. Pour tous les autres types de données, cette colonne
est NULL.
|
interval_type | character_data |
Si data_type identifie un type d'intervalle,
cette colonne contient la spécification des champs que les intervalles
incluent pour cette colonne, par exemple YEAR TO
MONTH , DAY TO SECOND , etc. Si aucune
restriction de champs n'est spécifiée (autrement dit, l'intervalle
accepte tous les champs) et pour tous les autres types de données,
ce champ est NULL.
|
interval_precision | character_data |
S'applique à une fonctionnalité non disponible dans
PostgreSQL (voir
datetime_precision pour la précision en fraction
des secondes des attributs du type d'intervalle)
|
character_set_catalog | sql_identifier | S'applique à une fonctionnalité non disponible dans PostgreSQL. |
character_set_schema | sql_identifier | S'applique à une fonctionnalité non disponible dans PostgreSQL. |
character_set_name | sql_identifier | S'applique à une fonctionnalité non disponible dans PostgreSQL. |
collation_catalog | sql_identifier | Nom de la base contenant le collationnement de l'attribut (toujours la base de données courante), NULL s'il s'agit du collationnement par défaut ou si le type de données de l'attribut ne peut pas avoir de collationnement |
collation_schema | sql_identifier | Nom du schéma contenant le collationnement de l'attribut, NULL s'il s'agit du collationnement par défaut ou si le type de données de l'attribut ne peut pas avoir de collationnement |
collation_name | sql_identifier | Nom du collationnement de l'attribut, NULL s'il s'agit du collationnement par défaut ou si le type de données de l'attribut ne peut pas avoir de collationnement |
domain_catalog | sql_identifier | Si la colonne a un type domaine, le nom de la base de données où le type est défini (toujours la base de données courante), sinon NULL. |
domain_schema | sql_identifier | Si la colonne a un type domaine, le nom du schéma où le domaine est défini, sinon NULL. |
domain_name | sql_identifier | Si la colonne a un type de domaine, le nom du domaine, sinon NULL. |
udt_catalog | sql_identifier | Nom de la base de données où le type de données de la colonne (le type sous-jacent du domaine, si applicable) est défini (toujours la base de données courante). |
udt_schema | sql_identifier | Nom du schéma où le type de données de la colonne (le type sous-jacent du domaine, si applicable) est défini. |
udt_name | sql_identifier | Nom du type de données de la colonne (le type sous-jacent du domaine, si applicable). |
scope_catalog | sql_identifier | S'applique à une fonctionnalité non disponible dans PostgreSQL. |
scope_schema | sql_identifier | S'applique à une fonctionnalité non disponible dans PostgreSQL. |
scope_name | sql_identifier | S'applique à une fonctionnalité non disponible dans PostgreSQL. |
maximum_cardinality | cardinal_number | Toujours NULL car les tableaux ont toujours une cardinalité maximale illimitée avec PostgreSQL. |
dtd_identifier | sql_identifier | Un identifiant du descripteur du type de données de la colonne, unique parmi les descripteurs de type de données contenus dans la table. Ceci est principalement utile pour joindre d'autres instances de ces identifiants. (Le format spécifique de l'identifiant n'est pas défini et rien ne permet d'assurer qu'il restera inchangé dans les versions futures.) |
is_self_referencing | yes_or_no | S'applique à une fonctionnalité non disponible dans PostgreSQL. |
is_identity | yes_or_no |
Si la colonne est une colonne d'identité, alors YES ,
sinon NO .
|
identity_generation | character_data |
Si la colonne est une colonne d'identité, alors ALWAYS
sinon BY DEFAULT , reflétant la définition de la
colonne.
|
identity_start | character_data | Si la colonne est une colonne identité, alors la valeur de démarrage de la séquence interne, sinon NULL. |
identity_increment | character_data | Si la colonne est une colonne identité, alors l'incrément de la séquence interne, sinon NULL. |
identity_maximum | character_data | Si la colonne est une colonne identité, alors la valeur maximale de la séquence interne, sinon NULL. |
identity_minimum | character_data | Si la colonne est une colonne identité, alors la valeur minimale de la séquence interne, sinon NULL. |
identity_cycle | yes_or_no |
Si la colonne est une colonne identité, alors YES si
la séquence interne fait un cycle et NO dans le cas
contraire ; sinon NULL.
|
is_generated | character_data |
Si la colonne est une colonne générée, alors ALWAYS ,
sinon NEVER .
|
generation_expression | character_data | Si la colonne est une colonne générée, alors l'expression générée, sinon null. |
is_updatable | yes_or_no |
YES si la colonne est actualisable,
NO dans le cas contraire (les colonnes des tables
sont toujours modifiables, les colonnes des vues ne le sont pas
nécessairement).
|
Puisqu'en SQL les possibilités de définir les types de données sont nombreuses, et que PostgreSQL offre des possibilités supplémentaires, leur représentation dans le schéma d'information peut s'avérer complexe.
La colonne data_type
est supposée identifier le type de
données interne sous-jacent de la colonne. Avec
PostgreSQL, cela signifie que le type est défini
dans le schéma du catalogue système pg_catalog
. Cette
colonne est utile si l'application sait gérer les
types internes (par exemple, formater les types numériques différemment
ou utiliser les données dans les colonnes de précision). Les colonnes
udt_name
, udt_schema
et
udt_catalog
identifient toujours le type de données
sous-jacent de la colonne même si la colonne est basée sur un domaine.
Puisque PostgreSQL traite les types internes comme des types utilisateur, les types internes apparaissent aussi ici. Il s'agit d'une extension du standard SQL.
Toute application conçue pour traiter les données en fonction du type peut
utiliser ces colonnes, car, dans ce cas, il importe peu de savoir si la
colonne est effectivement fondée sur un domaine.
Si la colonne est fondée sur un domaine, l'identité du domaine est
stockée dans les colonnes domain_name
,
domain_schema
et domain_catalog
. Pour
assembler les colonnes avec leurs types de données associés et
traiter les domaines comme des types séparés, on peut écrire
coalesce(domain_name, udt_name)
, etc.