Gestion des données spatiales avec l'GISextension Post - Amazon Relational Database Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gestion des données spatiales avec l'GISextension Post

Post GIS est une extension de Postgre SQL pour le stockage et la gestion des informations spatiales. Pour en savoir plus sur PostGIS, consultez Post GIS .net.

À partir de la version 10.5, Postgre SQL prend en charge la bibliothèque libprotobuf 1.3.0 utilisée par Post GIS pour travailler avec les données de tuiles vectorielles des boîtes de cartes.

La configuration de l'GISextension Post nécessite rds_superuser des privilèges. Nous vous recommandons de créer un utilisateur (rôle) pour gérer l'GISextension Post et vos données spatiales. L'GISextension Post et ses composants associés ajoutent des milliers de fonctions à PostgreSQL. Envisagez de créer l'GISextension Post dans son propre schéma si cela convient à votre cas d'utilisation. L'exemple suivant montre comment installer l'extension dans sa propre base de données, mais cela n'est pas nécessaire.

Étape 1 : créer un utilisateur (rôle) pour gérer l'GISextension Post

Tout d'abord, connectez-vous à votre SQL instance de base de données RDS for Postgre en tant qu'utilisateur disposant de rds_superuser privilèges. Si vous avez conservé le nom par défaut lors de la configuration de votre instance, vous vous connectez en tant que postgres.

psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password

Créez un rôle distinct (utilisateur) pour administrer l'GISextension Post.

postgres=> CREATE ROLE gis_admin LOGIN PASSWORD 'change_me'; CREATE ROLE

Accordez des privilèges rds_superuser à ce rôle, pour lui permettre d'installer l'extension.

postgres=> GRANT rds_superuser TO gis_admin; GRANT

Créez une base de données à utiliser pour vos GIS artefacts Post. Cette étape est facultative. Vous pouvez également créer un schéma dans votre base de données utilisateur pour les GIS extensions Post, mais cela n'est pas non plus obligatoire.

postgres=> CREATE DATABASE lab_gis; CREATE DATABASE

Accordez à gis_admin tous les privilèges sur la base de données lab_gis.

postgres=> GRANT ALL PRIVILEGES ON DATABASE lab_gis TO gis_admin; GRANT

Quittez la session et reconnectez-vous à votre SQL instance de base de données RDS for Postgre en tant que. gis_admin

postgres=> psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=gis_admin --password --dbname=lab_gis Password for user gis_admin:... lab_gis=>

Continuez à configurer l'extension comme indiqué dans les étapes suivantes.

Étape 2 : Chargez les GIS extensions Post

L'GISextension Post inclut plusieurs extensions connexes qui fonctionnent ensemble pour fournir des fonctionnalités géospatiales. En fonction de votre cas d'utilisation, vous n'aurez peut-être pas besoin de toutes les extensions créées dans cette étape.

Utilisez CREATE EXTENSION des instructions pour charger les GIS extensions Post.

CREATE EXTENSION postgis; CREATE EXTENSION CREATE EXTENSION postgis_raster; CREATE EXTENSION CREATE EXTENSION fuzzystrmatch; CREATE EXTENSION CREATE EXTENSION postgis_tiger_geocoder; CREATE EXTENSION CREATE EXTENSION postgis_topology; CREATE EXTENSION CREATE EXTENSION address_standardizer_data_us; CREATE EXTENSION

Vous pouvez vérifier les résultats en exécutant la SQL requête présentée dans l'exemple suivant, qui répertorie les extensions et leurs propriétaires.

SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1; List of schemas Name | Owner --------------+----------- public | postgres tiger | rdsadmin tiger_data | rdsadmin topology | rdsadmin (4 rows)

Étape 3 : transfert de la propriété des extensions

Utilisez les ALTER SCHEMA instructions pour transférer la propriété des schémas au gis_admin rôle.

ALTER SCHEMA tiger OWNER TO gis_admin; ALTER SCHEMA ALTER SCHEMA tiger_data OWNER TO gis_admin; ALTER SCHEMA ALTER SCHEMA topology OWNER TO gis_admin; ALTER SCHEMA

Vous pouvez confirmer le changement de propriétaire en exécutant la SQL requête suivante. Vous pouvez également utiliser la méta-commande \dn à partir de la ligne de commande psql.

SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1; List of schemas Name | Owner --------------+--------------- public | postgres tiger | gis_admin tiger_data | gis_admin topology | gis_admin (4 rows)

Étape 4 : Transférer la propriété des GIS objets Post

Utilisez la fonction suivante pour transférer la propriété des GIS objets Post au gis_admin rôle. Exécutez l'instruction suivante à partir de l'invite psql pour créer la fonction.

CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$; CREATE FUNCTION

Ensuite, exécutez cette requête pour exécuter la fonction exec qui à son tour exécute les instructions et modifie les autorisations.

SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO gis_admin;') FROM ( SELECT nspname, relname FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) WHERE nspname in ('tiger','topology') AND relkind IN ('r','S','v') ORDER BY relkind = 'S') s;

Étape 5 : Testez les extensions

Pour éviter d'avoir à spécifier le nom du schéma, ajoutez le schéma tiger à votre chemin de recherche en utilisant la commande suivante.

SET search_path=public,tiger; SET

Testez le tiger schéma à l'aide de l'SELECTinstruction suivante.

SELECT address, streetname, streettypeabbrev, zip FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na; address | streetname | streettypeabbrev | zip ---------+------------+------------------+------- 1 | Devonshire | Pl | 02109 (1 row)

Pour en savoir plus sur cette extension, consultez Tiger Geocoder dans la GIS documentation du Post.

Testez l'accès au schéma topology en utilisant l'instruction SELECT suivante. Cela appelle la fonction createtopology qui enregistre un nouvel objet topologique (my_new_topo) avec l'identifiant de référence spatiale spécifié (26986) et la tolérance par défaut (0.5). Pour en savoir plus, consultez CreateTopologyla GIS documentation du Post.

SELECT topology.createtopology('my_new_topo',26986,0.5); createtopology ---------------- 1 (1 row)

Étape 6 : mise à niveau de l'GISextension Post

Chaque nouvelle version de Postgre SQL prend en charge une ou plusieurs versions de l'GISextension Post compatibles avec cette version. La mise à niveau SQL du moteur Postgre vers une nouvelle version ne met pas automatiquement à niveau l'GISextension Post. Avant de mettre à niveau le SQL moteur Postgre, vous mettez généralement Post GIS à niveau vers la dernière version disponible pour la version actuelle de PostgreSQL. Pour plus de détails, consultez Versions GIS postérieures à l'extension.

Après la mise à niveau SQL du moteur Postgre, vous devez à nouveau mettre à niveau l'GISextension Post, vers la version prise en charge pour la version du SQL moteur Postgre récemment mise à niveau. Comment effectuer une mise à niveau de version majeure.

Vous pouvez vérifier à tout moment les mises à jour des versions d'GISextension Post disponibles sur votre pour une SQL instance de base de données Postgre. Pour ce faire, exécutez la commande suivante. Cette fonction est disponible avec Post GIS 2.5.0 et les versions supérieures.

SELECT postGIS_extensions_upgrade();

Si votre application ne prend pas en charge la dernière GIS version de Post, vous pouvez installer une ancienne version de Post GIS disponible dans votre version principale comme suit.

CREATE EXTENSION postgis VERSION "2.5.5";

Si vous souhaitez effectuer une mise à niveau vers une GIS version Post spécifique à partir d'une ancienne version, vous pouvez également utiliser la commande suivante.

ALTER EXTENSION postgis UPDATE TO "2.5.5";

Selon la version à partir de laquelle vous effectuez la mise à niveau, vous devrez peut-être utiliser à nouveau cette fonction. Le résultat de la première exécution de la fonction détermine si une mise à niveau supplémentaire est nécessaire. C'est le cas par exemple pour la mise à niveau du Post GIS 2 vers le Post GIS 3. Pour de plus amples informations, veuillez consulter Mise à niveau du Post GIS 2 vers le Post GIS 3.

Si vous avez mis à niveau cette extension pour préparer une mise à niveau majeure du SQL moteur Postgre, vous pouvez poursuivre les autres tâches préliminaires. Pour de plus amples informations, veuillez consulter Comment effectuer une mise à niveau de version majeure.

Versions GIS postérieures à l'extension

Nous vous recommandons d'installer les versions de toutes les extensions telles que PostGIS, telles que répertoriées dans la section Postgre. SQL Les versions des extensions pour Amazon RDS pour Postgre sont disponibles SQL dans les notes de SQLmise à jour RDS d'Amazon pour Postgre. Pour obtenir une liste des versions qui sont disponibles dans votre version, utilisez la commande suivante.

SELECT * FROM pg_available_extension_versions WHERE name='postgis';

Vous trouverez des informations sur les versions dans les sections suivantes des notes de SQL mise à jour RDS d'Amazon pour Postgre :

Mise à niveau du Post GIS 2 vers le Post GIS 3

À partir de la version 3.0, la fonctionnalité Post GIS raster est désormais une extension distincte,postgis_raster. Cette extension dispose de son propre chemin d'installation et de mise à niveau. Cela supprime des dizaines de fonctions, de types de données et d'autres artefacts nécessaires au traitement des images matricielles de l'extension postgis de base. Cela signifie que si votre cas d'utilisation ne nécessite pas de traitement matriciel, vous n'avez pas besoin d'installer l'extension postgis_raster.

Dans l'exemple de mise à niveau suivant, la première commande de mise à niveau extrait la fonctionnalité raster dans l'extension postgis_raster. Une deuxième commande de mise à niveau est alors nécessaire pour mettre à niveau postgis_raster vers la nouvelle version.

Pour passer du poste GIS 2 au poste GIS 3
  1. Identifiez la version par défaut de Post GIS disponible pour la SQL version Postgre sur votre cluster de . RDSpour une SQL instance de base de données Postgre. Pour ce faire, exécutez la requête suivante.

    SELECT * FROM pg_available_extensions WHERE default_version > installed_version;   name   | default_version | installed_version |                          comment ---------+-----------------+-------------------+------------------------------------------------------------  postgis | 3.1.4           | 2.3.7             | PostGIS geometry and geography spatial types and functions (1 row)
  2. Identifiez les versions de Post GIS installées dans chaque base de données sur . votre SQL instance RDS de base de données Postgre for. En d'autres termes, interrogez chaque base de données utilisateur comme suit.

    SELECT e.extname AS "Name", e.extversion AS "Version", n.nspname AS "Schema", c.description AS "Description" FROM pg_catalog.pg_extension e LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass WHERE e.extname LIKE '%postgis%' ORDER BY 1;   Name   | Version | Schema |                             Description ---------+---------+--------+---------------------------------------------------------------------  postgis | 2.3.7   | public | PostGIS geometry, geography, and raster spatial types and functions (1 row)

    Cette incompatibilité entre la version par défaut (Post GIS 3.1.4) et la version installée (Post GIS 2.3.7) signifie que vous devez mettre à jour l'extension Post. GIS

    ALTER EXTENSION postgis UPDATE; ALTER EXTENSION WARNING: unpackaging raster WARNING: PostGIS Raster functionality has been unpackaged
  3. Exécutez la requête suivante pour vérifier que la fonctionnalité raster est maintenant dans son propre package.

    SELECT probin, count(*) FROM pg_proc WHERE probin LIKE '%postgis%' GROUP BY probin;           probin          | count --------------------------+-------  $libdir/rtpostgis-2.3    | 107  $libdir/postgis-3        | 487 (2 rows)

    Le résultat montre qu'il y a toujours une différence entre les versions. Les GIS fonctions Post sont en version 3 (postgis-3), tandis que les fonctions raster (rtpostgis) sont en version 2 (rtpostgis-2.3). Pour terminer la mise à niveau, vous exécutez à nouveau la commande de mise à niveau, comme suit.

    postgres=> SELECT postgis_extensions_upgrade();

    Vous pouvez ignorer les messages d'avertissement, il n'y a aucun risque. Exécutez à nouveau la requête suivante pour vérifier que la mise à niveau est terminée. La mise à niveau est terminée lorsque Post GIS et toutes les extensions associées ne sont pas marquées comme nécessitant une mise à niveau.

    SELECT postgis_full_version();
  4. Utilisez la requête suivante pour voir le processus de mise à niveau terminé et les extensions packagées séparément, et vérifiez que leurs versions correspondent.

    SELECT e.extname AS "Name", e.extversion AS "Version", n.nspname AS "Schema", c.description AS "Description" FROM pg_catalog.pg_extension e LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass WHERE e.extname LIKE '%postgis%' ORDER BY 1;       Name      | Version | Schema |                             Description ----------------+---------+--------+---------------------------------------------------------------------  postgis        | 3.1.5   | public | PostGIS geometry, geography, and raster spatial types and functions  postgis_raster | 3.1.5   | public | PostGIS raster types and functions (2 rows)

    Le résultat indique que l'extension Post GIS 2 a été mise à niveau vers Post GIS 3, postgis et les deux, ainsi que l'postgis_rasterextension désormais séparée, sont la version 3.1.5.

Une fois cette mise à niveau terminée, si vous ne prévoyez pas d'utiliser la fonctionnalité raster, vous pouvez abandonner l'extension comme suit.

DROP EXTENSION postgis_raster;