Skip to main content

向 PostgreSQL 数据库添加 ST_Geometry 类型

在 Standard 或 Advanced 许可等级下可用。

要使用 ST_Geometry 类型将空间数据存储在 PostgreSQL 数据库中,数据库管理员可以运行创建空间类型地理处理工具或调用 CreateSpatialType ArcPy 函数的 Python 脚本将类型、其子类型和函数添加到数据库。

提示:

如果您使用了创建企业级地理数据库地理处理工具(其中空间类型参数设置为 PostGIS)以在 PostgreSQL 中创建地理数据库,并且稍后决定将 ST_Geometry 类型添加至该地理数据库,则可以运行创建空间类型工具以将 ST_Geometry 添加至该地理数据库。 否则,您只能在数据库中运行创建空间类型工具。

创建空间类型工具和函数可执行以下操作:

  • 在 PostgreSQL 数据库集群中创建 sde 登录角色。

  • 授予 sde 用户超级用户权限(创建 ST_Geometry 类型后可撤销该权限)。

  • 在数据库中创建名为 sde 的方案。

  • 授予 sde 用户对 sde 方案的完全权限。

  • 授予公共登录组对 sde 方案的 USAGE 权限。 可以从公共群组撤销此权限,但必须为需要访问 ST_Geometry 类型、子类型或函数的所有用户授予对 sde 方案的 USAGE 权限。

  • 在 sde 方案中创建必需的函数、属性域、表(sde_coordinate_systems 和 sde_geometry_columns)和视图(st_geometry_columns 和 st_spatial_references),并在公共方案中创建 sde_spatial_references 表。

在运行工具或函数之前,您必须将 st_geometry 库复制到 PostgreSQL 服务器。

注:

在 Microsoft Windows 服务器上进行部署时,st_geometry.dll 文件需要使用 Microsoft Visual C++ Redistributable Package (x64)。 有关所需的软件包版本,请参阅使用 PostgreSQL 的 ArcGIS 要求。 如果 PostgreSQL 服务器上没有此软件包,可从 Microsoft 站点下载该包并安装。

使用创建空间类型地理处理工具

要运行创建空间类型地理处理工具在 PostgreSQL 数据库中安装 ST_Geometry 类型,请完成以下步骤:

  1. My Esri 下载 ST_Geometry 压缩文件。

    这些压缩文件特定于您将用于创建空间类型的 ArcGIS 软件版本。

    如果未提供下载选项,请联系 ArcGIS 组织管理员

  2. 提取该文件的内容。

    注:

    st_geometry 库适用于特定操作系统和 PostgreSQL 版本。 请确保您复制了正确的库。

  3. 将 st_geometry 文件放入 PostgreSQL lib 目录中。

    • 如果 PostgreSQL 安装在 Windows server 服务器上,则将 st_geometry.dll 文件放在服务器的 %PostgreSQL%\lib 目录中。

    • 根据安装 PostgreSQL 方式的不同,Linux 上 lib 目录的位置可能会有所不同。 要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份运行 pg_config。 针对 PKGLIBDIR 返回的值是需要放置 st_geometry.so 文件的 lib 目录。 以根用户身份登录到计算机,以将该文件复制到 lib 位置。

    注:

    如果您的 Linux 操作系统不包含 libstdcc++.so.6.0.29 或更高版本的库,也需要将 libstdcc++.so.6 库与 st_geometry.so 库一起放置在 PostgreSQL lib 目录中。

  4. 打开 ArcGIS Pro 中的工程,打开目录窗格,然后作为 PostgreSQL 超级用户连接到数据库

    将在工程文件夹中创建数据库连接 (.sde) 文件。

  5. 打开创建空间类型工具。

    可以使用搜索窗口查找工具,或者从数据管理工具箱的工作空间工具集中打开工具。

  6. 将在第 2 步中创建的数据库连接添加至输入数据库连接参数文本框。

  7. SDE 用户密码参数文本框中提供 sde 数据库用户的密码。

    提示:

    如果 PostgreSQL 数据库集群已具有 sde 登录角色,则您提供的密码必须与现有 sde 登录角色的密码相匹配。 例如,如果您在同一数据库集群中拥有一个企业级地理数据库,则 sde 登录角色已存在,并且您必须在此处使用其密码。

  8. 表空间名称参数文本框留空。

  9. 单击运行

ST_Geometry 类型、子类型和函数是在所指定数据库的 sde 用户方案中创建的。

使用 ArcPy 函数

在任何 ArcGIS Pro 或 ArcGIS Server 计算机上,使用 CreateDatabaseConnection ArcPy 函数创建数据库连接文件 (.sde),并以 PostgreSQL 超级用户身份将该文件连接到 PostgreSQL 数据库。 接下来,使用 .sde 文件和 CreateSpatialType ArcPy 函数在数据库中创建 ST_Geometry 类型、子类型和函数。

  1. My Esri下载 st_geometry 库,并放到 PostgreSQL lib 目录中。

    注:

    如果您的 Linux 操作系统不包含 libstdcc++.so.6.0.29 或更高版本的库,也需要从 My Esri 下载 PostgreSQL 的 libstdcc++.so.6 库,并将其与 st_geometry.so 库一起放置在 PostgreSQL lib 目录中。

    st_geometry 库适用于特定操作系统、PostgreSQL 版本和 ArcGIS 版本。

    • 根据安装 PostgreSQL 方式的不同,Linux 上 lib 目录的位置可能会有所不同。 要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份运行 pg_config。 针对 PKGLIBDIR 返回的值是需要放置 st_geometry.so 文件的 lib 目录。 以根用户身份登录到计算机,以将该文件复制到 lib 位置。

    • 如果 PostgreSQL 安装在 Windows server 服务器上,则将 st_geometry.dll 文件放在服务器的 %PostgreSQL%\lib 目录中。

  2. 运行 CreateDatabaseConnection 函数创建 .sde 文件。

    您必须以 PostgreSQL 超级用户身份进行连接,并且必须保存凭据。

    在以下示例中,在名为 TempFiles 的目录中创建了连接文件,连接文件名称为 suserconnection.sde,提供了超级用户身份凭据,并将此凭据与此文件一同保存,以在数据库集群 pginstance 中连接名为 pgdb 的数据库。

    import arcpy
    arcpy.management.CreateDatabaseConnection(
       "/user/TempFiles",
       "suserconnection.sde",
       "POSTGRESQL",
       "pginstance",
       "DATABASE_AUTH",
       "postgres",
       "Cl@rkK3nt",
       "SAVE_USERNAME",
       "pgdb"
    )
    
  3. 运行 CreateSpatialType ArcPy 函数,以在 PostgreSQL 实例中安装 ST_Geometry 类型。

    此示例使用了上一步骤中的连接文件,且 SDE 密码设置为 pw0rd4sde。

    import arcpy
    arcpy.management.CreateSpatialType(
       "suserconnection.sde",
       "pw0rd4sde"
    )
    
    

ST_Geometry 类型、子类型和函数是在数据库连接文件中指定的数据库的 SDE 用户方案中创建的。