ArcGIS 所支持的 PostgreSQL 数据类型
创建表或向数据库中的表添加新列时,列将创建为特定的数据类型。数据类型是用于确定数据值自身以及可对数据执行哪些操作的分类,也表示列中数据在数据库中的存储方式。
从 ArcGIS 访问数据库表时,可以使用特定数据类型。在目录树中通过“数据库连接”节点或在 ArcMap 中通过查询图层访问数据库表时,ArcGIS 会过滤掉任何不支持的数据类型。如果直接访问数据库表,则不支持的数据类型不会显示在 ArcGIS 界面,您也无法通过 ArcGIS 编辑这些数据。同样,复制包含不受 ArcGIS 支持的数据类型的表时,将只复制支持的数据类型;将表粘贴到另一个数据库或地理数据库时,不会存在不支持的数据类型列。
在 ArcGIS 中创建要素类或表时,或者使用 ArcGIS 向现有表或要素类添加列时,可向字段分配 11 种可能的数据类型。未与这些类型对应的数据库数据类型不能直接在 ArcGIS 客户端应用程序中使用。
第一列列出了 ArcGIS 中可用的数据类型。第二列列出了将在数据库中创建的 PostgreSQL 数据类型。第三列显示了在 ArcGIS 中查看时哪些其他 PostgreSQL 数据类型(如果有)会映射到 ArcGIS 数据类型。
ArcGIS 数据类型 |
创建的 PostgreSQL 数据类型 | 可以查看的其他 PostgreSQL 数据类型 |
备注 |
---|---|---|---|
BLOB |
BYTEA | ||
DATE |
TIMESTAMP WITHOUT ZONE | TIMESTAMP | |
DOUBLE |
NUMERIC(p) | BIG SERIAL、DOUBLE PRECISION | ArcGIS 中指定的精度和小数位数可以影响在数据库中创建的生成数据类型。有关详细信息,请参阅 ArcGIS 字段数据类型。 |
FLOAT |
NUMERIC(p) | ArcGIS 中指定的精度和小数位数可以影响在数据库中创建的生成数据类型。有关详细信息,请参阅 ArcGIS 字段数据类型。 | |
GEOMETRY |
ST_GEOMETRY or GEOMETRY | 在企业级地理数据库中,创建要素类时使用的配置关键字的 GEOEMTRY_STORAGE 设置将决定在数据库中创建的数据类型。 ST_Geometry 和几何都属于超类。在 ArcGIS for Desktop 中创建要素类时,创建为 ST_Geometry 的点要素类使用 ST_Point 子类型进行存储,创建为 PostGIS 几何的点要素类使用 Point 子类型进行存储。对于在 ArcGIS for Desktop 中创建的所有其他类型的要素类,都使用超类。如果是使用 SQL 创建空间列,则实际创建的数据子类型将取决于所指定的子类型是什么类型。 要在数据库中使用 ST_Geometry 必须先进行安装。有关详细信息,请参阅向 PostgreSQL 数据库添加 ST_Geometry 类型。 要使用 PostGIS 几何类型,您必须在 PostgreSQL 数据库集群中安装 PostGIS,且数据库本身必须允许使用 PostGIS。有关详细信息,请参阅 PostgreSQL 文档。 | |
GUID |
VARCHAR(38) | ||
LONG INTEGER |
INTEGER | SERIAL | |
OBJECTID |
地理数据库中的 INTEGER 数据库中的 SERIAL |
ArcGIS 类型 ObjectID 是表(或要素类)的注册行 ID 列。每个表只能存在一个 ObjectID。对于在 ArcGIS 外部创建的表,只有在注册到地理数据库之后才会将列转换为 ObjectID。 | |
RASTER |
BYTEA or ST_RASTER | 仅在企业级地理数据库中支持栅格,且创建的 PostgreSQL 数据类型取决于创建栅格目录、栅格数据集或镶嵌数据集时所使用的 DBTUNE 配置关键字。 要使用 ST_Raster,必须先在地理数据库中对其进行单独配置。有关说明,请参阅在 PostgreSQL 中安装 ST_Raster 类型。 | |
SHORT INTEGER |
SMALLINT | REAL | |
TEXT |
CHARACTER VARYING | CHARACTER、VARCHAR、TEXT |
如果您的表中包含了一列具有 ArcGIS 不支持的数据类型的数据,则可以将该列转换为文本。但是请仅在想要查看该列中值时这样做;如果需要执行将用到该列中值的分析,请不要这样做。例如,您可以执行 SELECT 语句选择 tableb 中的列,并将小数列“total”转换为文本:
SELECT id, name, total::text
FROM me.mydb.tableb;