Lorsque vous créez une table ou ajoutez une colonne à une table dans une base de données, vous définissez un type de données spécifique pour la colonne. Les types de données déterminent les éléments suivants :
- Les valeurs que vous pouvez stocker dans la colonne
- Les opérations que vous pouvez utiliser sur les données de cette colonne
- La manière dont les données de cette colonne sont stockées dans la base de données
ArcGIS utilise des types de données spécifiques. Lorsque vous accédez à une table de base de données via un nœud Connexions aux bases de données ou via une couche de requête, ArcGIS élimine tous types de données non pris en charge. ArcGIS n'affiche pas les types de données non pris en charge et vous ne pouvez pas les modifier via ArcGIS. De la même façon, lorsque vous utilisez ArcGIS pour copier et coller des tables qui contiennent des types de données non pris en charge d'une base de données vers une autre, ArcGIS colle uniquement les colonnes qui utilisent un type de données pris en charge.
La première colonne de la table suivante répertorie les types de données ArcGIS. La deuxième colonne répertorie le type de données PostgreSQL qu'ArcGIS crée. La troisième colonne indique les autres types de données PostgreSQL (le cas échéant) correspondant au type de données ArcGIS lorsque vous consultez une table créée en dehors d'ArcGIS. La dernière colonne fournit des informations supplémentaires lorsque cela est nécessaire.
types de données ArcGIS | Types de données PostgreSQL créés | Autres types de données PostgreSQL pouvant être affichés | Notes |
---|---|---|---|
BLOB | BYTEA | ||
Date | TIMESTAMP WITHOUT ZONE | TIMESTAMP | |
DOUBLE | NUMERIC(p) | BIG SERIAL, DOUBLE PRECISION | La précision et l'échelle spécifiées dans ArcGIS peuvent affecter le type de données obtenu créé dans la base de données. Reportez-vous à la rubrique Types de données des champs ArcGIS pour plus d'informations. |
FLOAT | NUMERIC(p) | La précision et l'échelle spécifiées dans ArcGIS peuvent affecter le type de données obtenu créé dans la base de données. Reportez-vous à la rubrique Types de données des champs ArcGIS pour plus d'informations. | |
GEOMETRY | ST_GEOMETRY or GEOMETRY (PostGIS) | Dans une géodatabase, le paramètre GEOMETRY_STORAGE du mot-clé de configuration utilisé lorsque vous créez la classe d'entité détermine le type de données créé dans la base de données. Pour utiliser ST_Geometry dans une base de données (pas une géodatabase), vous devez l'installer. Consultez la section Ajouter le type ST_Geometry à une base de données PostgreSQL pour en savoir plus. Pour utiliser le type de géométrie PostGIS, vous devez installer PostGIS dans le cluster de bases de données PostgreSQL et la base de données elle-même doit être activée de telle sorte qu'elle puisse utiliser PostGIS. Pour plus d'informations, consultez la documentation PostgreSQL. | |
ID global | VARCHAR(38) | Pris uniquement en charge dans les géodatabases. | |
GUID | VARCHAR(38) | UUID | Prise en charge de l'UUID ajoutée dans la version 10.5.1 et ArcGIS Pro 2.0. |
LONG INTEGER | INTEGER | SERIAL | |
Identifiant d’objet | INTEGER dans une géodatabase SERIAL dans une base de données | L'identifiant d'objet de type ArcGIS est la colonne d'ID de ligne enregistrée pour la table (ou classe d'entités). Une seule colonne par table. | |
RASTER | BYTEA or ST_RASTER | Les rasters sont uniquement pris en charge dans les géodatabases. Le type de données PostgreSQL créé dépend du mot-clé de configuration (rasterblob, binary ou st_raster) utilisé lors de la création d'un jeu de données raster ou d'une mosaïque. Vous devez configurer séparément ST_Raster dans la géodatabase pour l'utiliser. Reportez-vous à la rubrique Installer ST_Raster dans PostgreSQL pour en savoir plus. | |
SHORT INTEGER | SMALLINT | REAL | |
TEXT | CHARACTER VARYING | CHARACTER, VARCHAR, TEXT |
Si votre table contient une colonne avec un type de données non pris en charge dans ArcGIS, vous pouvez redéfinir la colonne en texte. Toutefois, ne procédez ainsi que si vous souhaitez consulter les valeurs de la colonne, et non si vous devez effectuer des analyses faisant appel aux valeurs de cette colonne. Par exemple, vous pouvez exécuter une instruction SELECT pour choisir les colonnes dans tableb et redéfinir en texte la colonne décimale (total) :
SELECT id, name, total::text
FROM me.mydb.tableb;
Types de géométrie
Comme cela est indiqué dans la table, ArcGIS crée et peut manipuler deux types de géométrie dans PostgreSQL : Esri ST_Geometry ou Géométrie PostGIS. Les deux sections suivantes proposent davantage d'informations sur ces deux types de données.
ST_Geometry
Voici une description générale du type de donnée spatiale ST_Geometry : Pour obtenir des informations propres à une implémentation PostgreSQL, reportez-vous à la rubrique ST_Geometry dans PostgreSQL.
Le type de données ST_Geometry implémente les spécifications SQL 3 pour les types de données définis par l'utilisateur (UDT), qui permettent de créer des colonnes capables de stocker des données spatiales telles que la localisation d'un point de repère, d'une rue ou d'une parcelle. Il permet un accès à la géodatabase et à la base de données en langage SQL (structured query language) conforme aux normes de l'ISO (International Organization for Standards) et de l'OGC (Open Geospatial Consortium). Ce stockage étend les capacités de la base de données en permettant le stockage d'objets qui représentent des entités géographiques (points, lignes et polygones). Il a été conçu pour utiliser de façon efficace les ressources de la base de données, pour être compatible avec les fonctions de la base de données, telles que la réplication et le partitionnement et pour permettre un accès rapide aux données spatiales.
ST_Geometry est un résumé, une super classe non instanciée. Toutefois, ses sous-classes peuvent être instanciées. Un type de données instancié peut être défini comme une colonne de tableau pouvant accueillir des valeurs de son type.
Bien que vous puissiez définir une colonne en tant que type ST_Geometry, vous n'insérez pas de valeurs ST_Geometry dans la colonne puisqu'elle ne peut pas être instanciée. Vous insérez plutôt les valeurs de la sous-classe.
Le diagramme suivant montre la hiérarchie du type de données ST_Geometry et de ses sous-classes.
Les sous-classe de ST_Geometry sont divisées en deux catégories : sous-classes de géométrie de base et sous-classe d'ensembles homogènes. Les géométries de base comprennent les objets ST_Point, ST_LineString et ST_Polygon, alors que les ensembles homogènes comprennent les objets ST_MultiPoint, ST_MultiLineString et ST_MultiPolygon. Comme ces noms l'indiquent, les ensembles homogènes sont des ensembles de géométries de base. En plus des propriétés communes aux géométries de base, les ensembles homogènes disposent également de quelques propriétés propres.
Chaque sous-classe stocke le type de géométrie que son nom indique ; par exemple, ST_MultiPoint stocke des multi-points. Le tableau suivant fournit une liste des sous-classes et leurs descriptions :
Sous-type | Description |
---|---|
ST_Point |
|
ST_LineString |
|
ST_Polygon |
|
ST_MultiPoint |
|
ST_MultiLineString |
|
ST_MultiPolygon |
|
Notez que chaque sous-classe hérite des propriétés de la superclasse ST_Geometry mais possède également des propriétés qui lui sont propres. Les fonctions applicables au type de données ST_Geometry acceptent l'ensemble des types d'entités de sous-classe. Toutefois, certaines fonctions ont été définies au niveau de la sous-classe et acceptent uniquement certaines sous-classes. Par exemple, la fonction ST_GeometryN n'accepte en entrée que des valeurs de sous-type ST_MultiLinestring, ST_MultiPoint ou ST_MultiPolygon.
Géométrie PostGIS
PostGIS est un produit qui spatialise des bases de données PostgreSQL. PostGIS est conforme aux spécifications SQL de l'OGC (Open Geospatial Consortium, Inc.) des entités simples pour SQL (Structured Query Language). Il utilise les représentations OGC binaires (WKB) et textuelles (WKT) de la géométrie.
PostGIS possède deux options de types spatiaux : géométrie et géographie. Seule le type de géométrie est pris en charge avec ArcGIS.
Lorsque vous utilisez le type de stockage de géométrie PostGIS avec ArcGIS, tenez compte des règles suivantes :
- Vous devez utiliser le modèle de base de données PostGIS pour créer la base de données PostgreSQL que vous allez utiliser pour la géodatabase ou pour activer PostGIS dans la base de données.
- L'utilisateur sde et tout autre utilisateur qui crée des données dans la géodatabase ou la base de données doit se voir accorder des autorisations sur des tables PostGIS spécifiques.
- Les classes d'entités que vous créez peuvent uniquement utiliser les références spatiales répertoriées dans la table public.spatial_ref_sys de PostGIS. Si vous spécifiez une référence spatiale qui ne figure pas dans cette table, la création de la classe d'entités échoue.
- Vous devez spécifier un mot-clé de configuration contenant le paramètre GEOMETRY_STORAGE défini sur PG_GEOMETRY pour créer une classe d'entités qui utilise le type de géométrie PostGIS.
- Vous ne pouvez pas renommer des tables spatiales stockées à l'aide du type de géométrie PostGIS. En effet il n'existe aucune fonction PostGIS permettant d'actualiser le nom de table dans la table public.geometry_columns.
- Les classes d'entités d'une géodatabase dans PostgreSQL qui utilisent le type de géométrie PostGIS contiendront un champ pour le stockage des courbes et des données DAO, GDB_GEOMATTR_DATA. Si vous créez une table spatiale en dehors d'ArcGIS et que vous enregistrez la table dans la géodatabase, ce champ sera ajouté à votre table.
Pour utiliser le type de géométrie PostGIS, vous devez installer PostGIS. Installez PostGIS après avoir installé PostgreSQL. Veillez à installer une version de PostGIS prise en charge par la version d'ArcGIS que vous souhaitez utiliser.
Lorsque vous installez PostGIS, un modèle de base de données PostGIS est créé dans le cluster de bases de données PostgreSQL. Utilisez le modèle de base de données PostGIS pour créer une base de données dans laquelle stocker votre géodatabase.
Accorder des privilèges pour créer des colonnes de géométrie PostGIS
Lorsqu'une base de données est activée pour PostGIS, deux tables (geometry_columns et spatial_ref_sys) sont créées dans la structure publique. Vous devez accorder au minimum les privilèges SELECT, INSERT, UPDATE et DELETE sur la table geometry_columns et SELECT sur la table spatial_ref_sys à l'utilisateur sde et à chaque utilisateur qui devra créer des données dans la géodatabase.
GRANT select, insert, update, delete
ON TABLE public.geometry_columns
TO <user_name>;
GRANT select
ON TABLE public.spatial_ref_sys
TO <user_name>;
Créer des classes d'entités qui utilisent la géométrie PostGIS
ArcGIS utilise un paramètre de configuration de la table sde_dbtune pour déterminer le type de données spatiales à utiliser lorsque vous créez une classe d'entités. Il s'agit du paramètre GEOMETRY_STORAGE. Pour les géodatabases dans PostgreSQL, il peut être défini sur ST_GEOMETRY ou sur PG_GEOMETRY (le paramètre pour le type de géométrie PostGIS). Par conséquent, lorsque vous souhaitez créer à l'aide d'ArcGIS une classe d'entités utilisant le type de géométrie PostGIS, spécifiez un mot-clé de configuration contenant le paramètre GEOMETRY_STORAGE défini sur PG_GEOMETRY.
Par défaut, les nouvelles classes d'entités utilisent le stockage ST_Geometry. Pour stocker la plupart de vos données avec les types de stockage PostGIS, définissez la valeur du paramètre GEOMETRY_STORAGE du mot-clé de configuration DEFAULTS de la table sde_dbtune sur PG_GEOMETRY. En revanche, pour stocker une partie de vos classes d'entités seulement avec le type de stockage PostGIS, vous pouvez spécifier le mot-clé de configuration PG_GEOMETRY lors de la création de votre classe d'entités. Une fois exporté de la géodatabase, le mot-clé PG_GEOMETRY apparaît sous la forme suivante :
##PG_GEOMETRY GEOMETRY_STORAGE "PG_GEOMETRY" UI_TEXT "User Interface text description for POSTGIS geometry storage" END
Les autres paramètres de stockage sont extraits du mot-clé DEFAULTS. Pour plus d'informations sur les paramètres et mots-clés de configuration, reportez-vous aux rubriques suivantes :
Utiliser des tables de géométrie existantes
ArcGIS peut utiliser les tables contenant des colonnes de géométrie PostGIS créées par des applications externes ou à l'aide de SQL (également nommées tables tierces) tant que chaque table respecte les conditions préalables suivantes :
- Chaque table doit contenir une colonne de géométrie unique. Sinon, définissez une couche de requête ou une vue incluant uniquement l'une des colonnes de géométrie.
- Les tables ne doivent pas contenir d'autres colonnes d'un type défini par l'utilisateur.
- Les tables doivent comporter un seul type de géométrie (points, lignes ou polygones), pouvant éventuellement être de type multi-parties.
- Chaque table doit contenir une colonne de nombres entiers, uniques, de valeur non NULL, appropriée comme colonne d'ID d'enregistrement inscrite.
- Chaque table doit avoir un index spatial.
Pour plus d'informations sur la création de tables avec une colonne PostGIS à l'aide de SQL, consultez la documentation PostGIS.
Vous pouvez vous connecter à une base de données PostgreSQL qui contient des tables PostGIS d'ArcGIS Desktop et les inscrire auprès de la géodatabase. Pour plus d'informations, reportez-vous à la rubrique Inscrire une table ou une vue auprès de la géodatabase.
Types de données raster
Vous pouvez utiliser les types de données bytea ou ST_Raster pour stocker des rasters dans une géodatabase dans PostgreSQL. Bytea est utilisé par défaut. Pour utiliser ST_Raster, la géodatabase doit être configurée à cet effet.
Bytea
Bytea est un type de données de chaîne binaire à longueur variable utilisé par PostgreSQL. Il est semblable à un BLOB. Consultez la documentation PostgreSQL pour en savoir plus sur ce type de données.
ST_Raster
ST_Raster est un type de données défini par l'utilisateur que vous pouvez installer dans des géodatabases d'entreprise pour permettre un accès SQL aux données raster.
Pour utiliser le type ST_Raster, vous devez le configurer dans la base de données.
Pour obtenir davantage d'informations sur la définition d'un type d'objet ST_Raster, consultez la rubrique Type de données ST_Raster.