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

Requêtes PostgreSQL Discussion :

Postgis : requete ST_Isvalidreason sur plusieurs tables


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Postgis : requete ST_Isvalidreason sur plusieurs tables
    Bonjour,

    Débutant sur postgresql/postgis je cherche à mettre en place une requête me permettant de lister les objets (plus précisément la raison) ayant des géométries non valide pour postgis.
    Plutôt que de le réaliser table par table j'aimerai le réaliser en une requête pour toute les tables de ma base.
    Voilà la requête pour une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ST_IsValidReason(geometry)
    FROM 'ma_table'
    WHERE ST_IsValid(geometry) = false;
    Est-il possible de réaliser cela pour toutes les tables de la base en une fois ?

    Merci.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Il faut passer par du SQL dynamique.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette réponse rapide !
    Mais comme indiqué je débute en sql, saurais tu où je peux trouver un peu de doc ou aurais tu des pistes, exemple à m'indiquer ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Quelque chose comme :

    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
    CREATE FUNCTION DYNAMIC_SQL_GEO_VALIDATE()
     RETURNS SETOF record
     LANGUAGE plpgsql
    AS 
    $function$
    DECLARE
       sql_data text;
       data_set RECORD;  
    BEGIN 
     
    FOR sql_data,  
    IN 
       SELECT 'SELECT ST_IsValidReason(' || C.COLUMN_NAME || ') FROM ' 
              || T.TABLE_SCHEMA || '.' || T.TABLE_NAME || ' WHERE ST_IsValid(' 
    	      || C.COLUMN_NAME || ') = false;'
       FROM   INFORMATION_SCHEMA.TABLES AS T 
              INNER JOIN INFORMATION_SCHEMA.COLUMNS AS C 
    	            ON T.TABLE_SCHEMA = C.TABLE_SCHEMA
    		   	    AND T.TABLE_NAME = C.TABLE_NAME
       WHERE  C.DATA_TYPE = 'geometry';
    LOOP
        EXECUTE sql_data INTO rec;
        RETURN NEXT data_set;
    END LOOP;
    END
    $function$
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Désolé de répondre un peu tard.
    Merci pour cet exemple, je vais l'étudier un peu pour le comprendre (car c'est un peu au dessus de mes compétences pour l'instant !) et ensuite le tester. Je vous tiens au courant de la suite.
    Encore merci !

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/03/2007, 13h23
  2. Réponses: 7
    Dernier message: 17/03/2007, 14h52
  3. [MySQL] Problème requete SQL sur plusieurs tables
    Par Tiib_CD dans le forum Langage SQL
    Réponses: 30
    Dernier message: 21/12/2006, 17h52
  4. Requete MySQL sur plusieurs tables
    Par romulus67 dans le forum Requêtes
    Réponses: 10
    Dernier message: 03/07/2006, 18h45
  5. Réponses: 8
    Dernier message: 17/05/2006, 15h32

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