Skip to main content

在 Linux 上的 PostgreSQL 中创建地理数据库

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

要在 PostgreSQL 数据库中创建地理数据库,请从 ArcGIS 客户端运行地理处理工具或 Python 脚本。

如果使用 ArcGIS Pro 3.7 创建地理数据库,则地理数据库版本为 12.1.0.x。

首先阅读以下先决条件,然后按照适合实际情况的说明进行操作。

这些说明适用于 Linux 服务器上的 PostgreSQL 安装。 如果在 Microsoft Windows 服务器上安装了 PostgreSQL,请参阅在 Windows 的 PostgreSQL 中创建地理数据库

先决条件

在 PostgreSQL 中创建地理数据库之前,请执行以下操作:

  1. 请确认您想使用的 ArcGIS、PostgreSQL 和操作系统组合相互支持

  2. 获取 ArcGIS Server 密钥文件,并将其放置到用于创建地理数据库的 ArcGIS 客户端可访问的位置。

  3. 如果您将在现有 PostgreSQL 数据库中创建或启用地理数据库,请确保公共方案存在。

    将在公共方案中创建地理数据库系统表之一。

  4. 确定将创建地理数据库的人员(因为这会影响创建数据库的人员),以及使用哪个工具来创建地理数据库。 按照适合实际情况的说明进行操作:

您是 PostgreSQL 和地理数据库管理员

如果您使用数据库管理员和地理数据库管理员的角色,并知晓这两个登录角色的密码,则可以使用创建企业级地理数据库地理处理工具或调用工具的 Python 脚本在 PostgreSQL 中创建地理数据库。

创建企业级地理数据库工具用于创建地理数据库所需的数据库对象并授予所需的权限。 要达到此目的,应使用特定的默认设置。 下面介绍了创建企业级地理数据库工具的用途和所使用的设置:

  • 该工具使用 PostgreSQL 默认模板 (template1) 创建数据库。

    如果需要从不同模板创建的数据库(例如,如果您想使用为数据库群集定义的模板),则必须在运行此工具之前创建数据库。 然后,运行创建企业级地理数据库工具或脚本时,请指定创建的数据库的名称。

  • 该工具在数据库集群中创建经数据库身份验证的 sde 登录角色并授予其超级用户身份。

    sde 用户必须是超级用户才能创建地理数据库。

  • 还会在数据库中创建 sde 方案。

    地理数据库系统表、视图、函数和过程均存储在 sde 方案中。

  • 将 sde 用户设置为 sde 方案的所有者并向公共角色授予 sde 方案的使用权限。

    使用地理数据库的登录角色必须能够访问 sde 方案。 因为地理数据库登录角色可能尚不存在,因此该工具将向公共角色授予使用权限。 创建地理数据库后,可以增强该地理数据库的安全性,方法为撤消公共角色的 sde 方案使用权限并只向需要访问地理数据库的登录组和登录角色授予使用权限。

  • 该工具可创建地理数据库。

首先,您(或 IT 部门的某人)必须安装 PostgreSQL 并配置数据库集群。

安装并配置 PostgreSQL

按以下步骤设置 PostgreSQL 数据库集群以存储地理数据库:

  1. 获取并安装受支持的 PostgreSQL 版本并配置数据库集群。

    有关安装和配置 PostgreSQL 的说明,请参阅 PostgreSQL 文档

  2. 将数据库集群配置为接受连接。

    其中包括更改 pg_hba.conf 文件以允许数据库集群接受远程连接。

  3. 在用于存储数据库的数据库集群中创建表空间。 如果不创建表空间,则将使用 pg_default 表空间。

接下来,安装并配置 ArcGIS 客户端。

提供对空间类型的访问权限

要存储地理数据库,PostgreSQL 必须有权访问空间类型。 您可以为数据库集群提供对 Esri ST_Geometry 空间类型的访问权限或安装 PostGIS。

当数据库集群有权访问空间类型时,您可以创建地理数据库。

ST_Geometry

要在地理数据库中使用 ST_Geometry,请将 st_geometry.so 文件放在 PostgreSQL lib 目录下。 根据安装 PostgreSQL 方式的不同,Linux 上 lib 目录的位置可能会有所不同。 要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份运行 pg_config。 针对 PKGLIBDIR 返回的值是需要放置 st_geometry 库的 lib 目录。

可从 My Esri 下载 st_geometry.so 文件。

ST_Geometry 需要存在 libstdcc++.so.6.0.29 库或更高版本。 如果安装 PostgreSQL 的计算机不包含此该库,请从 My Esri 下载适用于 PostgreSQL 的 libstdcc++.so.6 库。

以超级用户身份,将特定于 PostgreSQL 版本的 st_geometry.so 库文件放置在 PostgreSQL lib 目录下。 如果未将正确的 st_geometry.so 库放置在 PostgreSQL lib 目录下,将无法创建地理数据库。 如果需要,请将 libstdcc++.so.6 文件放置在相同的目录中。

现在,您可以通过数据库集群和 ArcGIS 客户端创建地理数据库。

PostGIS

要在地理数据库中使用 PostGIS 空间类型,请将 PostGIS 安装到 PostgreSQL 数据库集群。 请确保安装 ArcGIS 支持的 PostGIS 版本。

安装 ArcGIS 客户端

您(或 IT 部门的某人)必须安装 ArcGIS Pro(Standard 或 Advanced)或 ArcGIS Server。 您可以运行 Python 脚本从这些客户端中的任何一个创建地理数据库。 要运行创建企业级地理数据库地理处理工具,而非脚本,请安装 ArcGIS Pro。

注:

您需要一个 ArcGIS Server 密钥代码文件,才能在下一部分中授权地理数据库。 即使不在 ArcGIS Server 计算机上运行 Python 脚本来创建地理数据库,也必须授权 ArcGIS Server 才能获取密钥代码文件。 可能需要将 ArcGIS Server 计算机中的密钥代码文件复制到可使用创建企业级地理数据库地理处理工具访问的位置。

创建地理数据库

从 ArcGIS Pro 运行创建企业级地理数据库工具,或从 ArcGIS Pro 或 ArcGIS Server 计算机运行调用工具的 Python 脚本以创建地理数据库。

运行“创建企业级地理数据库”工具

请遵照以下步骤在 ArcGIS Pro 中使用创建企业级地理数据库工具创建地理数据库:

  1. 启动 ArcGIS Pro。

  2. 打开创建企业级地理数据库工具。

    您可以搜索或浏览到此工具,它位于“数据管理”工具箱的“地理数据库管理”工具集中。 有关打开地理处理工具的常规信息,请参阅查找地理处理工具

  3. 数据库平台下拉列表中选择 PostgreSQL

  4. 实例文本框中,提供 PostgreSQL 服务器的名称。

  5. 数据库文本框中,提供要创建的数据库(用来包含地理数据库)的名称。

    注:

    输入小写的数据库名称;PostgreSQL 中的地理数据库不支持大写和大小写混合的对象名称。 如果您输入的数据库名称为大写形式或大小写混合形式,则 ArcGIS 会将其转换为小写形式。

  6. 您必须以 postgres 超级用户身份连接到数据库集群以创建数据库和其他对象;因此,数据库管理员文本框的默认值为 postgres

    如果超级用户具有其他名称,请在数据库管理员文本框中提供该名称。

    在此版本中,您无法使用经操作系统身份验证的 postgres 超级用户登录账户。

  7. 数据库管理员密码文本框中,提供 postgres 超级用户的密码。

  8. 地理数据库管理员密码文本框中,提供 sde 用户的密码。

    提示:

    在 PostgreSQL 中,地理数据库管理员必须以 sde 命名,因此地理数据库管理员文本框已预填充为 sde

    如果 sde 用户已存在于数据库集群中,则提供现有用户的密码即会在数据库中创建 sde 方案。 如果用户尚不存在,则会在数据库集群中创建名为 sde 的用户(密码为指定的密码),并会在数据库中创建相应的方案。 向公共组角色授予对 sde 方案的使用权限。

    提示:

    要在创建地理数据库后增强方案安全性,可撤消公共组角色的使用权限、创建新的组角色,并向该角色授予 sde 方案使用权限,然后将该组角色授予需要访问地理数据库的所有登录角色。

  9. 如果您将表空间配置为用作数据库的默认表空间,则在表空间名称文本框中提供其名称。

    此工具不创建表空间;您必须指定一个现有表空间或将此文本框留空。 如果不指定表空间,则在 pg_default 中创建数据库。

  10. 对于授权文件,浏览到授权 ArcGIS Server 时创建的密钥代码文件并将其选中。

    在 Windows 上安装 ArcGIS Server 时,该文件将写入 \\Program Files\ESRI\License<release#>\sysgen,在 Linux 上安装 ArcGIS Server 时,该文件写入 /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen。 将此文件复制到客户端(可通过该客户端创建地理数据库)的访问位置。 如果尚未执行此操作,则立即授权 ArcGIS Server 以创建此文件。

  11. 使用空间类型下拉列表选择地理数据库将使用的空间类型:ST_Geometry 或 PostGIS。

  12. 单击运行

PostgreSQL 数据库现在包含一个地理数据库。

可在 sde_setup.log 文件中查找创建地理数据库的相关消息,该文件是在为运行脚本的计算机上的 TEMP 变量指定的目录中创建的。 如果在创建地理数据库时出现问题,可查看此文件以解决这些问题。

接下来,您可创建能够将数据加载到地理数据库中的用户

在 ArcGIS 客户端计算机中运行 Python 脚本

可以通过复制、保存和运行此处提供的脚本在 ArcGIS Pro(Standard 或 Advanced)或 ArcGIS Server 计算机中创建地理数据库。

提示:

有关从 ArcGIS Server 机器运行 Python 的信息,请参阅 ArcGIS Server 和 ArcPy

  1. 在 ArcGIS 客户端计算机上创建文本文件,然后将以下脚本复制到该文件中,提供特定于您站点的信息:

    """
    Name: create_enterprise_gdb.py
    Description: Create an enterprise geodatabase in PostgreSQL with provided DBMS connection information
    Author: Esri
    """
    # Import system modules
    import arcpy, os
    # Local variables
    # Replace license path with keycodes file location at your site
    # Replace all arcpy.management.CreateEnterpriseGeodatabase values except "POSTGRESQL", "sde", and license with information appropriate for your site
    license = os.fsencode("/arcgis/path/to/authorization_file/keycodes")
    try:
      arcpy.management.CreateEnterpriseGeodatabase(
        "POSTGRESQL",
        "pgprod",
        "pggdb",
        "DATABASE_AUTH",
        "postgres",
        "N0pe3king!",
        "",
        "sde",
        "sdepwd2vr9dzmctBuB",
        "gis",
        license,
        "ST_GEOMETRY"
      )
      for i in range(arcpy.GetMessageCount()):
        arcpy.AddReturnMessage(i)
        arcpy.AddMessage("+++++++++\n")
    except:
      for i in range(arcpy.GetMessageCount()):
        arcpy.AddReturnMessage(i)
    
  2. 按照脚本中所述替换值。

  3. .py 扩展名保存该文件。

  4. 运行脚本。

    可在 sde_setup.log 文件中查找创建地理数据库的相关消息,该文件是在为运行脚本的计算机上的 TEMP 或 TMP 变量指定的目录中创建的。 如果在创建地理数据库时出现问题,可查看此文件以解决这些问题。

PostgreSQL 数据库现在包含一个地理数据库。

接下来,您可创建能够将数据加载到地理数据库中的用户

PostgreSQL 管理员创建数据库;地理数据库管理员创建地理数据库

如果创建地理数据库的用户无权访问数据库管理员(postgres 超级用户)的密码,则数据库管理员必须创建数据库、sde 登录角色和 sde 方案。 接下来,地理数据库管理员可以使用 sde 登录账户连接到数据库,并使用启用企业级地理数据库地理处理工具或调用该工具的 Python 脚本创建地理数据库。

启用企业级地理数据库工具以数据库连接文件作为输入,并在 sde 方案中创建地理数据库系统表、视图、函数和过程。 要运行此工具,数据库管理员必须在 PostgreSQL 数据库集群中创建以下内容:

  • 名为 sde 并具有超级用户身份的登录角色。

  • 数据库。

  • 已授予 sde 登录权限的数据库中的 sde 方案。

  • 空间类型 - st_geometry 库必须位于 lib 文件夹 PostgreSQL 安装目录中,或者必须在数据库中配置 PostGIS。

安装并配置 PostgreSQL 和空间类型

首先,数据库管理员必须准备 PostgreSQL 以用于存储地理数据库。

要以数据库管理员身份设置 PostgreSQL 数据库集群,请完成以下步骤:

注:

所有数据库对象名称仅可以使用小写字母。

  1. 获取并安装受支持的 PostgreSQL 版本并配置数据库集群。

    有关安装和配置 PostgreSQL 的说明,请参阅 PostgreSQL 文档

  2. 将数据库集群配置为接受连接。

    其中包括更改 pg_hba.conf 文件以允许数据库集群接受远程连接。

  3. 为 postgres 用户设置以下环境变量(如果尚未正确设置):

    • PGDATA - 应该已由 PostgreSQL 安装程序进行了设置。 若未设置,请将其设置为 PostgreSQL 数据目录位置。 (此设置位于 PostgreSQL 安装目录中。)

    • PATH - 设置 PATH 变量以包含 postgresql/bin

    • LD_LIBRARY_PATH - 如果您将为地理数据库配置 ST_Geometry 类型,请将 LD_LIBRARY_PATH 变量设置为 PostgreSQL lib 目录。 根据安装 PostgreSQL 方式的不同,lib 目录的位置会有所不同。 要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份运行 pg_config。 将 LD_LIBRARY_PATH 设置为返回的 PKGLIBDIR 值。

  4. 或者,在用于存储数据库的数据库集群中创建表空间。

  5. 创建名为 sde 的登录角色并授予其超级用户身份。

    提示:

    如果地理数据库管理员不移除数据库连接,您可以在创建地理数据库后取消 sde 角色的超级用户身份。

  6. 创建用于存储地理数据库的数据库。

  7. 在数据库中创建名为 sde 的方案并向 sde 登录角色授予该方案的权限。

  8. 在数据库中启用空间数据类型。

    • 要在数据库中配置 PostGIS,请参阅 PostGIS 文档以获取说明;然后继续执行步骤 10。

    • 要配置 ST_Geometry,请继续下一步。

  9. 获取 ST_Geometry 库并将其放置在 PostgreSQL lib 目录中。

    1. My Esri 下载 ST_Geometry 包。

      这些包特定于您将用于创建地理数据库的 ArcGIS 软件版本。

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

    2. 提取包的内容。

    3. 以根用户身份登录到已安装 PostgreSQL 的服务器。

    4. st_geometry.so 文件放入 PostgreSQL lib 目录中。

      根据安装 PostgreSQL 方式的不同,Linux 上 lib 目录的位置可能会有所不同。 要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份运行 pg_config。 返回的 PKGLIBDIR 值是需要放置 st_geometry 库的 lib 目录。

    5. 如果安装 PostgreSQL 的计算机上不存在 libstdcc++.so.6.0.29 库或更高版本,还需要将 libstdcc++.so.6 文件放置在 PostgreSQL lib 目录中。

  10. 为地理数据库管理员提供数据库连接信息。

    地理数据库管理员需要知道 sde 登录角色的数据库集群名称、数据库名称和密码。

现已存在数据库,地理数据库管理员可安装 ArcGIS 客户端并创建地理数据库。

安装 ArcGIS 客户端

地理数据库管理员需要用于创建地理数据库的 ArcGIS 客户端:ArcGIS Pro(Standard 或 Advanced)或 ArcGIS Server。

注:

您需要一个 ArcGIS Server 密钥代码文件,才能在下一部分中授权地理数据库。 即使不在 ArcGIS Server 计算机上运行 Python 脚本来创建地理数据库,也必须安装并授权 ArcGIS Server 才能获取密钥代码文件。 可能需要将 ArcGIS Server 计算机中的密钥代码文件复制到可使用启用企业级地理数据库地理处理工具访问的位置。

安装 ArcGIS 客户端后,可连接到数据库并创建地理数据库。

创建地理数据库

地理数据库管理员可以从 ArcGIS Pro(Standard 或 Advanced)中运行启用企业级地理数据库工具,或从 ArcGIS Pro 或调用 ArcPy 函数的 ArcGIS Server 中运行 Python 脚本,以在现有数据库中创建地理数据库。

运行“启用企业级地理数据库”工具

请遵照以下步骤在 ArcGIS Pro 中使用启用企业级地理数据库工具创建地理数据库:

  1. 启动 ArcGIS Pro。

  2. 以 sde 用户身份连接到 PostgreSQL 数据库

    如果 sde 用户为数据库身份验证用户,则必须在数据库连接中保存 sde 用户的密码。

  3. 打开启用企业级地理数据库工具。

    有关打开地理处理工具的常规信息,请参阅查找地理处理工具

  4. 将新的连接文件拖动到输入数据库字段中。

  5. 要指定授权文件值,请浏览至在授权 ArcGIS Server 时创建的密钥代码文件,并选择该文件。

    在 Windows 上安装 ArcGIS Server 时,该文件将写入 \\Program Files\ESRI\License<release#>\sysgen,在 Linux 上安装 ArcGIS Server 时,该文件写入 /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen。 将此文件复制到客户端(可通过该客户端创建地理数据库)的访问位置。 如果尚未执行此操作,则立即授权 ArcGIS Server 以创建此文件。

  6. 单击运行

PostgreSQL 数据库现在包含一个地理数据库。

可在 sde_setup.log 文件中查找创建地理数据库的相关消息,该文件是在为运行脚本的计算机上的 TEMP 变量指定的目录中创建的。 如果在创建地理数据库时出现问题,可查看此文件以解决这些问题。

接下来,数据库管理员可以为将创建、编辑和查看数据的用户创建登录角色和匹配架构,并为编辑者和数据查看者创建登录角色,然后为这些用户授予合适的权限

在 ArcGIS 客户端计算机中运行 Python 脚本

要通过从 ArcGIS Pro(Standard 或 Advanced)或 ArcGIS Server 计算机运行脚本来创建地理数据库,可以使用此处提供的脚本。

提示:

有关从 ArcGIS Server 机器运行 Python 的信息,请参阅 ArcGIS Server 和 ArcPy

按照以下步骤运行 Python 脚本以在 PostgreSQL 数据库中创建地理数据库:

  1. 在 ArcGIS 客户端计算机上创建文本文件,然后将以下脚本复制到该文件中,提供特定于您站点的信息:

    # Name: enable_enterprise_gdb.py
    # Description: Create an enterprise geodatabase in an existing PostgreSQL database
    # Import system modules
    import arcpy, os
    # Local variables
    # Replace paths with those appropriate to your site
    license = "/arcgis/path/to/authorization_file/keycodes"
    tempdir = "/tmp/"
    connection_file_name = "egdb_connection.sde"
    # Check for the .sde file and delete it if present
    connection_file_name_path = os.path.join(tempdir, connection_file_name)
    arcpy.env.overwriteOutput=True
      if os.path.exists(connection_file_name_path):
         os.remove(connection_file_name_path)
    # Create a connection to the geodatabase as the geodatabase administrator
    # Replace "pgprod" with the name of your PostgreSQL instance, "N0L0oking" with the sde password, and "entgdb" with the name of the database
    arcpy.management.CreateDatabaseConnection(
      tempdir,
      connection_file_name,
      "POSTGRESQL",
      "pgprod",
      "DATABASE_AUTH",
      "sde",
      "N0L0oking",
      "SAVE_USERNAME",
      "entgdb"
    )
    # Enable geodatabase
    try:
      arcpy.management.EnableEnterpriseGeodatabase(connection_file_name_path, license)
    except:
      for i in range(arcpy.GetMessageCount()):
        arcpy.AddReturnMessage(i)
    
  2. 按照脚本中所述替换值。

  3. .py 扩展名保存该文件。

  4. 运行脚本。

    可在 sde_setup.log 文件中查找创建地理数据库的相关消息,该文件是在为运行脚本的计算机上的 TEMP 或 TMP 变量指定的目录中创建的。 如果在创建地理数据库时出现问题,可查看此文件以解决这些问题。

PostgreSQL 数据库现在包含一个地理数据库。

接下来,数据库管理员可以为将创建、编辑和查看数据的用户创建登录角色和匹配架构,并为编辑者和数据查看者创建登录角色,然后为这些用户授予合适的权限