PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 12.18 » Interfaces client » Schéma d'information » columns

36.17. 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

NomType de donnéesDescription
table_catalogsql_identifierNom de la base de données contenant la table (toujours la base de données courante)
table_schemasql_identifierNom du schéma contenant la table
table_namesql_identifierNom de la table
column_namesql_identifierNom de la colonne
ordinal_positioncardinal_numberPosition de la colonne dans la table (la numérotation commençant à 1)
column_defaultcharacter_dataExpression par défaut de la colonne
is_nullableyes_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_typecharacter_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_lengthcardinal_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_lengthcardinal_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_precisioncardinal_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_radixcardinal_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_scalecardinal_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_precisioncardinal_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_typecharacter_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_precisioncharacter_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_catalogsql_identifierS'applique à une fonctionnalité non disponible dans PostgreSQL.
character_set_schemasql_identifierS'applique à une fonctionnalité non disponible dans PostgreSQL.
character_set_namesql_identifierS'applique à une fonctionnalité non disponible dans PostgreSQL.
collation_catalogsql_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_schemasql_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_namesql_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_catalogsql_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_schemasql_identifier Si la colonne a un type domaine, le nom du schéma où le domaine est défini, sinon NULL.
domain_namesql_identifierSi la colonne a un type de domaine, le nom du domaine, sinon NULL.
udt_catalogsql_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_schemasql_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_namesql_identifier Nom du type de données de la colonne (le type sous-jacent du domaine, si applicable).
scope_catalogsql_identifierS'applique à une fonctionnalité non disponible dans PostgreSQL.
scope_schemasql_identifierS'applique à une fonctionnalité non disponible dans PostgreSQL.
scope_namesql_identifierS'applique à une fonctionnalité non disponible dans PostgreSQL.
maximum_cardinalitycardinal_numberToujours NULL car les tableaux ont toujours une cardinalité maximale illimitée avec PostgreSQL.
dtd_identifiersql_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_referencingyes_or_noS'applique à une fonctionnalité non disponible dans PostgreSQL.
is_identityyes_or_no Si la colonne est une colonne d'identité, alors YES, sinon NO.
identity_generationcharacter_data Si la colonne est une colonne d'identité, alors ALWAYS sinon BY DEFAULT, reflétant la définition de la colonne.
identity_startcharacter_dataSi la colonne est une colonne identité, alors la valeur de démarrage de la séquence interne, sinon NULL.
identity_incrementcharacter_data Si la colonne est une colonne identité, alors l'incrément de la séquence interne, sinon NULL.
identity_maximumcharacter_data Si la colonne est une colonne identité, alors la valeur maximale de la séquence interne, sinon NULL.
identity_minimumcharacter_data Si la colonne est une colonne identité, alors la valeur minimale de la séquence interne, sinon NULL.
identity_cycleyes_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_generatedcharacter_data Si la colonne est une colonne générée, alors ALWAYS, sinon NEVER.
generation_expressioncharacter_data Si la colonne est une colonne générée, alors l'expression générée, sinon null.
is_updatableyes_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.