#1 Wed 27 April 2011 09:16
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Utilisation des schemas sous PostGIS
Bonjour a tous,
J'utilise PostGIS pour stocker mes données IG. Pour mieux organiser ma base de données, j'ai créé un schema pour chaque thématique (bdtopo, cadastre, urbanisme, assainissement...) dans lesquels j'ai rangé mes tables.
Cela fonctionne parfaitement si je travail sous Qgis, par contre dans d'autre application tel que MapGuide OS, les schémas que j'ai créé ne sont pas fonctionnels. Seul le schéma d'origine "public" fonctionne.
J'aurai voulu savoir si je pouvais configurer mes schéma pour qu'ils fonctionnent dans toutes les applications, ou bien si je devais revoir l'organisation de ma BDD en rapatriant toutes mes table dans le schema "public"?
Merci d'avance.
Hors ligne
#2 Wed 27 April 2011 09:56
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Utilisation des schemas sous PostGIS
Bonjour a tous,
J'utilise PostGIS pour stocker mes données IG. Pour mieux organiser ma base de données, j'ai créé un schema pour chaque thématique (bdtopo, cadastre, urbanisme, assainissement...) dans lesquels j'ai rangé mes tables.
Cela fonctionne parfaitement si je travail sous Qgis, par contre dans d'autre application tel que MapGuide OS, les schémas que j'ai créé ne sont pas fonctionnels. Seul le schéma d'origine "public" fonctionne.
J'aurai voulu savoir si je pouvais configurer mes schéma pour qu'ils fonctionnent dans toutes les applications, ou bien si je devais revoir l'organisation de ma BDD en rapatriant toutes mes table dans le schema "public"?
Merci d'avance.
Bonjour,
Organiser en schema est une bonne idee ! il faut la garder.
Pour que les tables et vues d'un schema soient "comprise" de la base de données sans avoir a utiliser le nom qualifié "schema.table" lors d'une requete, on peut utiliser la variable SEARCH_PATH de postgresql. Celle-ci définit la liste des schemas "par defaut", que la base cherchera automatiquement lors d'une requete.
C'est tres pratique, mais il y a une limitation: les noms des objets (tables, vues, fonctions, etc.) doivent etre uniques entre les schemas, sinon, on peut se retrouver avec des comportements curieux, exemple:
Prenons deux schemas: schema A, table T1, schema B, table T1.
On ajoute ces schemas a la variable search_path:
set search_path to a, b, public, "$user";
si on ecrit:
select * from T1;
ca sera interprété par la base comme:
select * from A.T1,
car le schema A est defini en premier dans la liste des search path.
Il faut donc veiller a utiliser des noms uniques pour ses objets.
Concernant Mapguide OS, que voulez-vous dire par "le schema n'est pas fonctionnel" ? les tables ne sont pas vues si elles sont dans des schemas ?
Les metadonnees de geometry_columns sont elles bien renseignees ?
En mettant a jour la variable search_path, Mapguide devrait s'y retrouver.
Sinon, ecrire a la communauté pour se plaindre !
Une application qui se branche sur des bases de données mais qui ne gere pas les schemas, c'est tout de meme tres bizarre !
Nicolas
Dernière modification par Nicolas Ribot (Sat 17 December 2011 11:47)
Hors ligne
#3 Wed 27 April 2011 09:58
Re: Utilisation des schemas sous PostGIS
Bonjour,
Qu'y a t'il dans la table geometry_column ? Est ce qu'elle liste correctement toutes les tables des différents schémas ?
A priori cela ne devrait pas poser de problème mais peut être que Mapguide OS ne gère pas cela
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#4 Wed 27 April 2011 12:26
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: Utilisation des schemas sous PostGIS
Concernant Mapguide OS, que voulez-vous dire par "le schema n'est pas fonctionnel" ? les tables ne sont pas vues si elles sont dans des schemas ?
Les metadonnees de geometry_columns sont elles bien renseignees ?
Quand je dis pas fonctionnel, j'arrive a me connecter à la BDD, mais je n'arrive pas accéder a la colonne de géométrie. (the_geom)
Mapguide OS permet d'utiliser différents schémas puisque qu'il faut le spécifier dans le provider FDO (il est nommé dans maestro "magasin de données").
Qu'y a t'il dans la table geometry_column ? Est ce qu'elle liste correctement toutes les tables des différents schémas ?
Dans la table "geometry_columns" j'ai bien la liste des tables et des schema.
Par contre dans les schémas que j'ai créé, je n'ai ni de table "geometry_columns", ni de table "spatial_ref_sys". Je ne les retrouvent que dans le schema "public"
Hors ligne
#5 Wed 27 April 2011 12:29
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: Utilisation des schemas sous PostGIS
Bon ben je viens de faire des tests, apparemment ca marche!!! J'ai rien touché, je comprend pas!!!
J'ai quand même pas mal d'instabilité entre postgis et mapguide OS (service mapguide qui plante lors des connextions de données).
Encore merci pour vos interventions.
Hors ligne
#6 Wed 27 April 2011 12:41
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Utilisation des schemas sous PostGIS
Par contre dans les schémas que j'ai créé, je n'ai ni de table "geometry_columns", ni de table "spatial_ref_sys". Je ne les retrouvent que dans le schema "public"
Normal, ces tables doivent etre dans le schema public, en un seul exemplaire: elles decrivent metadonnees et systemes de projection pour toute la base.
Hors ligne
#7 Wed 27 April 2011 13:58
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: Utilisation des schemas sous PostGIS
Ok, merci pour ces précisions.
Hors ligne
#8 Thu 23 June 2011 23:09
Re: Utilisation des schemas sous PostGIS
Bonjour,
Je reste sur ce même post pour le compléter mais aussi pour poser une petite question.
Je bosse également sur les schemas.et comme smile, j'ai eu le souci du "public" avec le système avec lequel je travaille.
J'ai mis dans le search_path les schemas (set search_path to a, b, public) mais tout se perd à chaque connexion, j'ai donc rajouter ALTER nom_user SET search_path to a, b, public.
Mais là apparait un autre soucis, c'est que cette commande ne sert que pour une base de données alors que le search_path sert pour le serveur postgis. Je m'explique :
pour une bd A avec un schemaA1 et un schemaA2 et une bd B avec un schemaB2,
- si je lance mon SQL sur ma baseA ALTER postgres SET search_path to shemaA2 , shemaA1 , public. Mon search_path est ainsi shemaA2 , shemaA1 , public (show search_path pour voir ce qu'il y a dans le search_path)
- Pour ajouter le schemaB2 je lance ma commande "ALTER postgres SET search_path to shemaA2 , shemaA1 , public, schemaB2". Mais postgis me dit "Le schemaB2 n'existe pas".
- Donc je le relance sur la seconde base "ALTER postgres SET search_path to schemaB2 , public", mais là mon search_path n'est plus que "shemaB2 , public"
Ma question est, avec vous une commande pour ajouter tous les schemas de toutes les bases?
Pour palier ce problème, j'ai créé une base vide nommée SCHEMA avec ou je créée tous les schemas de mes bases et je lance la ligne "ALTER postgres SET search_path to shemaA2 , shemaA1 , public, schemaB2". Et là avec show search_path on voit bien que tous les schemas sont bien saisis. Et tout fonctionne bien. Mais ça n'est pas vraiment optimal.
Si quelqu'un a la solution je suis preneur.
Hors ligne
#9 Fri 24 June 2011 08:41
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Utilisation des schemas sous PostGIS
Bonjour,
Je reste sur ce même post pour le compléter mais aussi pour poser une petite question.
Je bosse également sur les schemas.et comme smile, j'ai eu le souci du "public" avec le système avec lequel je travaille.
J'ai mis dans le search_path les schemas (set search_path to a, b, public) mais tout se perd à chaque connexion, j'ai donc rajouter ALTER nom_user SET search_path to a, b, public.
Mais là apparait un autre soucis, c'est que cette commande ne sert que pour une base de données alors que le search_path sert pour le serveur postgis. Je m'explique :
pour une bd A avec un schemaA1 et un schemaA2 et une bd B avec un schemaB2,
- si je lance mon SQL sur ma baseA ALTER postgres SET search_path to shemaA2 , shemaA1 , public. Mon search_path est ainsi shemaA2 , shemaA1 , public (show search_path pour voir ce qu'il y a dans le search_path)
- Pour ajouter le schemaB2 je lance ma commande "ALTER postgres SET search_path to shemaA2 , shemaA1 , public, schemaB2". Mais postgis me dit "Le schemaB2 n'existe pas".
- Donc je le relance sur la seconde base "ALTER postgres SET search_path to schemaB2 , public", mais là mon search_path n'est plus que "shemaB2 , public"
Ma question est, avec vous une commande pour ajouter tous les schemas de toutes les bases?
Pour palier ce problème, j'ai créé une base vide nommée SCHEMA avec ou je créée tous les schemas de mes bases et je lance la ligne "ALTER postgres SET search_path to shemaA2 , shemaA1 , public, schemaB2". Et là avec show search_path on voit bien que tous les schemas sont bien saisis. Et tout fonctionne bien. Mais ça n'est pas vraiment optimal.
Si quelqu'un a la solution je suis preneur.
Bonjour,
Le search_path peut etre réglé a plusieurs niveaux: connexion courantes, toutes les connexions, base, ou utilisateurs.
Pourquoi ne pas faire plutot un "alter database mabase set search_path to ..." plutot que de le faire au niveau utilisateur ?
Il me semble moins dangereux (risque de collision de noms d'objets dans les bases) de regler le search_path a chaque base.
Eventuellement, vous pouvez preparer une base template contenant vos schemas, regler le search path pour cette base (pas au niveau utilisateur), puis utiliser ce template pour creer de nouvelles bases.
Nicolas
Hors ligne
#10 Fri 24 June 2011 10:24
Re: Utilisation des schemas sous PostGIS
Je ne peux pas tester aujourd'hui... vive les rtt! Mais dès lundi je me mets au boulot! C'est vrai que c'est plus logique de faire avec les databases, mais je n'avais pas trouvé cette commande.
Par contre pour le template, aucune base n'a les mêmes schémas, donc au premier abords, ça ne va pas trop me servir. Mais je vais creuser un peu.
Merci bcp
Hors ligne
#11 Fri 24 June 2011 11:32
Re: Utilisation des schemas sous PostGIS
Bonjour,
Par contre pour le template, aucune base n'a les mêmes schémas, donc au premier abords, ça ne va pas trop me servir. Mais je vais creuser un peu.
Ca n'est pas un problème : ta base template sera vide avec un schéma public. Lorsque tu crées une nouvelle base celle-ci sera identique mais avec le search_path définie comme tu le souhaites. Tu pourras alors créer tes schémas selon tes besoins.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#12 Fri 24 June 2011 12:32
Re: Utilisation des schemas sous PostGIS
Ah ok, si c'est ça, c'est déjà fait, avec un template postgis, qui comporte un schéma public avec toutes les fonctions postgis, et les tables spatial_refsys et geometry_columns. Et je le prends par défaut à chaque création de base.
Ne reste plus qu'à tester ce que Nicolas m'a conseillé
Merci
Hors ligne
#13 Fri 09 December 2011 21:18
- Onana
- Juste Inscrit !
- Date d'inscription: 16 Nov 2011
- Messages: 5
Re: Utilisation des schemas sous PostGIS
Bjr à tous,
Je suis un novice . J'ai tapé la requête suivante dans RT SQL Layer:
Code:
CREATE VIEW Uranium_forest_protected AS SELECT samples.gid, samples.code, ore.name, forest_protected.name, samples.the_geom FROM samples JOIN ore_samples ON samples.gid = ore_samples.gid_sample JOIN ore ON ore.id = ore_samples.id_ore LEFT JOIN forest_protected ON St_within(samples.the_geom, forest_protected.the_geom) WHERE ore.name.name = 'U';
Le message d'erreur est le suivant :
ERREUR: le schéma « ore » n'existe pas. Qu'est ce qu'un schéma? Cpmment on le crée s'il n'existe?
Ce message est le même dans pgAdmin.
Je ne comprends pas.
[Edit] Bonjour, merci d'utiliser la balise CODE pour l'écriture de vos requête, cela facilite la lecture[/Edit]
Dernière modification par ChristopheV (Mon 12 December 2011 09:20)
Hors ligne
#14 Sat 17 December 2011 07:21
Re: Utilisation des schemas sous PostGIS
Bonjour,
la documentation de PostgreSQL est très bien faite, n'hésitez pas à la consulter tirer un bénéfice de vos erreurs et pour exploiter au mieux les capacité de votre outil.
http://docs.postgresql.fr/9.0/ddl-schemas.html
Dans la clause WHERE de votre requête, vous avez prefixé deux fois le nom de la colonne concernée :
Code:
WHERE ore.name.name = 'U';
Ça se traduit comme ceci : la colonne "name" de la table "name" contenue dans le schéma "ore" est égale à 'U'.
Bon week-end,
Mathieu BOSSAERT
Association GeoRezo
Hors ligne