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

 PostgreSQL Discussion :

Créer des tables dans un schéma spécifique avec psql


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut Créer des tables dans un schéma spécifique avec psql
    Bonjour,

    Je découvre l'outil psql et bloque sur une manipulation d'import.

    Je souhaiterais faire exécuter par psql un script sql de création de table et d'insertion de données dans ces tables.

    Seulement, je ne voudrais pas que ces tables soient créées dans le schéma 'public' par défaut mais dans un autre schéma (appelons le 'schema_test' par exemple). La variable 'search_path' semble être celle qui contient le nom du schéma 'actif' mais comment faire pour changer sa valeur avant exécution du script ?

    1ère méthode : Dans les options d'utilisation de psql dans une ligne de commande, je ne vois rien permettant de préciser un nom de schéma. L'option -v permet de modifier la valeur d'une variable, je tape donc :

    psql -d mabase -U monuser -v search_path=schema_test -f monfichierscript

    Le script s'exécute mais les tables sont créées dans le schéma 'public'...

    2ème méthode : Si je me connecte à ma base via psql j'obtiens une invite de commande du type mabase=#
    J'ai alors modifié la valeur de la variable search_path :
    mabase=>\set search_path to schema_test
    Puis lancé l'exécution de mon fichier script :
    mabase=#\i fichier_script.sql

    Le script s'exécute mais toujours dans le schéma 'public' de ma base...

    Quelqu'un pourrait-il m'indiquer la méthodologie pour spécifier un autre schéma ?

    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    J'ai alors modifié la valeur de la variable search_path :
    mabase=>\set search_path to schema_test
    \set est une commande interne à psql (comme toutes les commandes qui commençent par un antislash) qui positionne une variable interne, ce que n'est pas le search_path.

    C'est la commande SQL set qu'il faut utiliser. En conjonction avec show qui confirmera que la valeur a bien été prise en compte.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Effectivement merci estofilo, avec la commande sql :

    mabase=>set search_path to schema_test;

    C'est bien le 'schema_test' qui devient actif par défaut et ma création de table se fait alors dans ce schéma et plus dans 'public', soit exactement ce que je voulais.

    Penses-tu que se soit la méthode la plus adaptée ou existe t'il une variable interne à psql qui permettrait la même chose lorsque j'utilise cette syntaxe :

    psql -d mabase -U monuser -f monfichierscript

    Encore merci.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il y a plusieurs moyens de changer le search_path autrement, en voici 3:
    1) L'attribuer à l'utilisateur de base de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter user machin set search_path=...
    Sera persistant et pris en compte par n'importe quelle application, pas juste psql.

    2) Le mettre dans le fichier ~/.psqlrc. Persistant mais pris en compte que par psql.

    3) La solution la plus temporaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PGOPTIONS='-c search_path=chemin' psql -d mabase -U monuser -f monfichierscript

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Merci infiniment.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/08/2009, 21h20
  2. Afficher l'arborescence des tables dans un schéma oracle
    Par maghraoui dans le forum Administration
    Réponses: 2
    Dernier message: 07/05/2008, 15h04
  3. Réponses: 5
    Dernier message: 17/01/2007, 15h02
  4. Réponses: 1
    Dernier message: 22/12/2005, 09h03
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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