IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration PostgreSQL Discussion :

current_database ou current_database()


Sujet :

Administration PostgreSQL

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 998
    Points : 2 501
    Points
    2 501
    Par défaut current_database ou current_database()
    Hello les experts,

    J'ai un petit souci avec les fonctions current_database et current_user.
    Dans mes tests ci-dessous on voit que parfois il faut utiliser () après la fonction pour avoir le résultat et parfois non...
    Je comprends que current_database et current_user sont des fonctions car ils renvoient un résultat (à la différence d'une procédure) mais pourquoi pour certaines fonctions faut-il obligatoirement utiliser () et pour d'autres non?

    Quelque chose me dit que mon analyse ci-dessus est fausse mais... où?
    Dernier point : je ne comprends pas le message d'erreur "la colonne « current_database » n'existe pas" : pourquoi parler de colonne?

    Merci pour vos réponses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    postgres=# select current_database;
    ERREUR:  la colonne « current_database » n'existe pas
    LIGNE 1 : select current_database;
                     ^
     
    postgres=# select current_database();
     current_database
    ------------------
     postgres
    (1 ligne)
     
     
    postgres=# select current_user;
     current_user
    --------------
     postgres
    (1 ligne)
     
     
    postgres=# select current_user();
    ERREUR:  erreur de syntaxe sur ou près de « ( »
    LIGNE 1 : select current_user();
                                 ^
    postgres=#

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 039
    Points : 23 787
    Points
    23 787
    Par défaut
    Bonjour,

    C'est écrit dans la documentation de PostgreSQL :
    Note
    current_catalog, current_role, current_schema, current_user, session_user et user ont un statut syntaxique spécial en SQL : elles doivent être appelées sans les parenthèses. Dans PostgreSQL, les parenthèses peuvent être utilisées en option avec current_schema, mais pas avec les autres.
    Et pour la deuxième question, en SQL, tout se qui se trouve entre SELECT et FROM constitue la liste de sélection, et est donc considéré par défaut comme une colonne.

    ced

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Ceci par le fait que ces fonctions (current_catalog, current_role, current_schema, current_user, session_user et user) viennent de la norme SQL, dans laquelle les fonctions sans argument sont dénuées de parenthèses

    A +

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 998
    Points : 2 501
    Points
    2 501
    Par défaut
    Je vous remercie beaucoup

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Et pour info, le nom courant de la base de données dans la norme SQL c'est la fonction current_catalog. A l'origine le mot "base de données" n'existait pas. On parlait de banque de données dans lesquelles on ouvrait des catalogues de données contenant des schemas qui contenaient les objets relationnels (tables et vues).

    A +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [9.1] PL PGSQL - REINDEX DATABASE current_database() ?
    Par gui80 dans le forum Requêtes
    Réponses: 0
    Dernier message: 18/02/2016, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo