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 :

référencer une vue automatiquement


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 68
    Par défaut référencer une vue automatiquement
    bonjour,

    je voulais savoir quand lorsque je créé une vue dans PostGIS, je peux automatiquement la référencer dans la table 'geometry columns' ??

    merci beaucoup,

    cordialement,

    Nicolas.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    bonjour, il me semble que seules les tables sont referencées, à condition d'utiliser la fonction AddGeometryColumn lors de la creation

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 68
    Par défaut référencer une vue
    Bonjour Xavier-Pierre

    Citation Envoyé par xavier-Pierre Voir le message
    bonjour, il me semble que seules les tables sont referencées, à condition d'utiliser la fonction AddGeometryColumn lors de la creation
    il est possible de référencer des vues à la main en remplissant tous les champs de la table "geometry_colums" notament le champ "name" correspondant au titre de la vue et dont les type est adéquat (points, lignes polygones).

    cela permet d'afficher le résultat de la requête dans n'importe quel SIGclient
    (a condition qu'il permette la connexion avec PostGIS)

    cependant, il faut le faire à chaque fois à la main (copier coller du nom dans le champs)

    une autre possibilité m'a été communiquée pour automatiser cela :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Ce que tu veux faire c'est à chaque création de vue
    ajouter dans geometry_columns une nouvelle entrée.
    C'est-à-dire :
    
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234
    insert into geometry_columns
     (f_table_catalog, f_table_schema, f_table_name,
     f_geometry_column, coord_dimension, srid, "type")
     values('', 'public', 'tablename', 'the_geom', 2, 27582, 'POINT');
    Pour faire des insertions automatique on utilise en général des triggers ou le système de «rule» de postgres. Cependant pour ces deux derniers, ce n'est possible que sur des select/insert/update/delete. Donc pas sur les create view. Il reste deux méthodes. A chaque création de view exécuter le insert ci-dessus. deux cas : - la creation de la vue est dans un script, et un copier coller de la ligne ne coute pas grand-chose. - la creation de la vue est faite de façon interactive. Dans ce cas si pgadmin est utilisé, une bonne astuce est de créer trois macros (pour les trois types de geometrie) telles que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234
    insert into geometry_columns 
    (f_table_catalog, f_table_schema, f_table_name, 
    f_geometry_column, coord_dimension, srid, "type") 
    values ('', 'public', '$SELECTION$', 'the_geom', 2, 27582, 'POINT');
    Il suffit ensuite de sélectionner dans la fenêtre de requête le nom de la table/vue et de lancer la macro. La seconde méthode est de créer un trigger sur l'insert dans la table système des vues (pg_views), qui appellera une procédure stockée réalisant l'insertion ci-dessus. mais je doute que ce soit une bonne idée, car cela s'appliquera dans tous les cas de création de vue. Rarement une bonne chose que de toucher aux tables système autrement qu'en lecture seule. Bon courage, Vincent
    c'est exactement ce que je veux faire, mais je n'ai pas encore testé la solution.

    il y a cependant quelque chose qui me chiffonne, $SELECTION$ est bien une variable ?

    faut-il la déclarer? comment faire?

    merci beaucoup,

    cordialement,

    Nicolas

  4. #4
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 68
    Par défaut
    Bonjour à tous,

    Je reviens à ce post car ça faisait un petit moment que je ne travaillais plus sur le problème.

    Pour référencer la vue automatiquement, l'explication de Vincent doit être claire pour les connaisseurs. cependant pour "ceux qui s'y mettent" comme moi, je vais préciser un peu la manipulation que propose Vincent.

    Avec PgAdmin, il suffit d'aller dans le panneau SQL
    et dans le menu "macros", cliquez "gérer les macros".

    Choisir les touches de raccourcis que vous préférez et donner un nom.

    ensuite il faut mettre la requête que propose Vincent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into geometry_columns 
    (f_table_catalog, f_table_schema, f_table_name, 
    f_geometry_column, coord_dimension, srid, "type") 
    values ('', 'public', '$SELECTION$', 'the_geom', 2, 27572, 'POINT');
    si les géométries des objets de la vue sont des points, comme le dit Vincent, on peut en enregistrer plusieurs selon le type de géométrie des vues que l'on référencera dans la table "geometry columns"

    1 fois que la macro est enregistrée, on créé notre vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view test as select...
    Une fois la vue réalisée avec succès, rester dans le panneau SQL et sélectionner simplement le titre de la vue soit "test" dans notre et dans le menu "macros", cliquer sur la macro correspondant aux géométries de la vue.

    c'est le texte que l'on sélectionne qui vient remplacer la variable $SELECTION$ de la macro.
    il y a normalement un message qui confirme la création d'un identifiant auto incrémenté.

    voilà,

    j'espère que ça éclaire les novices.

    encore merci à Vincent et tous les retours qu'on à sur les forums.

    à bientôt,

    cordialement,

    Nicolas

Discussions similaires

  1. Créer une vue avec une clé automatique
    Par Sniper37 dans le forum Développement
    Réponses: 8
    Dernier message: 04/03/2009, 16h23
  2. [Preferences] Sauvegarde automatique des préférences sur une vue
    Par pistache42 dans le forum Eclipse Platform
    Réponses: 10
    Dernier message: 04/12/2006, 11h32
  3. [TADOTable] reconnaitre le trigger INSTEAD OF d'une vue...
    Par littledoudou dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/12/2003, 12h39
  4. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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