Créer un index spatial dans PostGIS sur un schéma entier
9
J'ai chargé un certain nombre de fichiers de formes à l'aide de SPIT (plugin QGIS) dans ma base de données PostGIS. Ces couches n'avaient pas d'index spatial créé lors du chargement. Je me demande s'il existe un moyen de créer un index spatial pour chaque couche du schéma sans écrire de requête pour chaque couche. Je ne suis pas un bon scénariste PostGIS, donc toute aide serait grandement appréciée.
Merci beaucoup, ça a l'air super. Je l'ai exécuté, mais il semble y avoir un problème, rappelez-vous, cela pourrait être dû à mon manque de capacité de script. Mais lorsque j'exécute les instructions SELECT, j'obtiens l'erreur suivante: ERREUR: la fonction batchindex (inconnue, variant de caractère, variant de caractère) n'existe pas LIGNE 1: sélectionnez BatchIndex ('public', f_table_name, f_geometry_column) ... Je ne suis pas sûr si je dois ajouter quelque chose pour obtenir le lot, ou si c'est juste un espace réservé pour quelque chose de différent. La requête CREATE s'est déroulée sans problème, mais aucun index n'a été généré.
Ryan Garnett
Hmm ... Je ne suis pas sûr de ce qui se passe alors. Le fait qu'il pense que le premier paramètre que vous passez est de type unknownplutôt que character varyingde déclencher des sonneries d'alarme, mais je ne vois pas où il a un problème. Je vais y réfléchir, en attendant, tous les gourous de PostgreSQL ont envie de l'essayer? :)
MerseyViking
2
La meilleure réponse ne fonctionnera pas si vous avez des vues avec géométrie. La modification de l'instruction «IF» pour vérifier que vous n'essayez pas de créer un index sur une vue résout ce problème. Si vous souhaitez utiliser des vues avec géométrie, remplacez cette ligne:
IF i_exists =0
avec ça:
IF i_exists =0AND tn IN(SELECT table_name, table_type FROM information_schema.tables WHERE table_type ='BASE TABLE')
unknown
plutôt quecharacter varying
de déclencher des sonneries d'alarme, mais je ne vois pas où il a un problème. Je vais y réfléchir, en attendant, tous les gourous de PostgreSQL ont envie de l'essayer? :)La meilleure réponse ne fonctionnera pas si vous avez des vues avec géométrie. La modification de l'instruction «IF» pour vérifier que vous n'essayez pas de créer un index sur une vue résout ce problème. Si vous souhaitez utiliser des vues avec géométrie, remplacez cette ligne:
avec ça:
la source
dites que votre table est en train de "construire", vous pouvez indexer en utilisant GIST
C'est bien ce que vous cherchez?
la source