升级 PostgreSQL 中的地理数据库

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

升级企业级地理数据库的目标是更新地理数据库系统表、存储过程、类型和函数,以利用新功能和漏洞修复。 如果您使用的数据库版本在所用的 ArcGIS 客户端中不再受支持,则可能还需要对数据库进行升级。

安装新版本的 ArcGIS AllSourceArcGIS Server,或将补丁包、修补程序或热修复程序应用到现有安装并升级地理数据库。

注:

即使不升级地理数据库,您所使用的数据库版本可能在当前的 ArcGIS 软件版本中也不再受支持。 如果数据库版本不再受支持,您可能需要升级地理数据库。 执行升级操作的间隔越长,升级过程所需的操作就越多。

如果使用 ArcGIS AllSource 3.5 升级地理数据库,则已升级的地理数据库版本为 11.5.0.x。

完成下列升级前的必需步骤,然后使用升级地理数据库地理处理工具或 Python 脚本升级地理数据库。

在升级之前

在对任何企业级系统(包括地理数据库)执行升级之前,必须事先进行规划。 在开发或测试服务器上测试新版本,以确保其能够与所有客户端应用程序配合使用。

当您确定新系统可如预期运行时,即可安排升级;请确保有必要员工可以执行升级,并且他们具有完成分配的任务所需的权限。

注意以下事项:

  • 不支持对软件的测试版本或预发行版本进行升级。
  • 如果 PostgreSQL 数据库版本支持用于当前 ArcGIS 版本,则可以从 10.9.x 或 11.x 地理数据库直接升级。

    如果 PostgreSQL 数据库版本对于当前地理数据库版本而言不支持,则您可能必须多次升级数据库和地理数据库,才能将地理数据库升级到当前版本。 地理数据库升级间隔越长,要达到最新地理数据库版本所需的升级次数越多。

    例如,在以下情况下,必须将数据库和地理数据库分别升级两次:

    要从较早的地理数据库版本升级,需要对地理数据库和数据库进行多步升级。

    对于地理数据库的各个中间升级步骤,请按照该地理数据库版本的升级说明操作,并在版本更改后测试地理数据库。 同样,遵循数据库供应商提供的每个数据库版本升级说明,并在版本更改后测试数据库。

  • 不提供将地理数据库降级到先前版本的正式机制。 升级到较新版本后,如果要降级地理数据库,则可以从包含较旧地理数据库版本的备份文件中恢复数据库。
  • 从使用 ST_Geometry 空间类型的 11.2.0 地理数据库升级时,升级进程将删除并重新创建在 ST_Geometry 列中定义的空间索引。

以下是升级地理数据库之前需要完成的步骤清单:

  1. 请阅读 ArcGIS 的 PostgreSQL 数据库要求以确认 Esri 支持要使用的 PostgreSQL 和 ArcGIS 版本组合。

    如果需要升级 PostgreSQL 数据库,有关数据库管理系统中的新功能及升级方式的信息,请参阅 PostgreSQL 文档。 请记住升级后的数据库的名称和所有者必须与以前相同。 同时将数据库的 search_path 变量设置为 "$user"publicsde

  2. 请参阅客户端与地理数据库兼容性以了解混用 ArcGIS 客户端版本的影响,并确定是否必须单独升级特定的数据集类型。
  3. 创建以 sde 用户身份进行验证的数据库连接
  4. 确认地理数据库可以升级。

    要执行此操作,需将要移动到的 ArcGIS 客户端版本安装到计算机上。 如果您安装了 ArcGIS AllSource,请使用之前步骤中创建的连接连接到地理数据库,并打开数据库属性对话框确定该地理数据库是否可以升级。 如果您安装了 ArcGIS Server(企业版),则可以使用在之前步骤中创建的连接文件和 ArcPy Describe 函数来确定该地理数据库是否可以升级,如以下示例所示。

    # Open Python.
    cd /arcgis/server/tools
    ./python
    
    # Import ArcPy.
    import arcpy
    
    # Create a connection to the geodatabase.
    arcpy.CreateDatabaseConnection_management("/tmp/",
                                              "egdb_connection.sde",
                                              "POSTGRESQL",
                                              "mypgdbcluster",
                                              "DATABASE_AUTH",
                                              "sde",
                                              "mysdepassword",
                                              "SAVE_USERNAME",
                                              "mypgdb")
    
    # Check the geodatabase release.
    isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease
    
    print(isCurrent)

    如果返回 False,则可升级地理数据库。 如果返回 True,则无需升级地理数据库。 请勿继续执行后续步骤。

  5. 创建数据库的备份。
  6. 移除任何已添加到 ArcGIS 外部的地理数据库系统表中的自定义功能,例如触发器或其他索引。

    升级程序无法兼容对系统表的自定义修改。 如果类似的自定义修改禁止更改系统表方案,升级将失败。

  7. 数据库管理员必须为 sde 用户授予升级地理数据库所需的权限。

    有关所需权限,请参阅 PostgreSQL 中的地理数据库权限

  8. 确保没有连接正在升级的地理数据库。

    查看当前连接到地理数据库的用户列表,请打开 ArcGIS AllSource 中的地理数据库管理对话框。

  9. 如果地理数据库使用 ST_Geometry 类型,请完成下一步。 否则,可以继续升级地理数据库

    如果您不确定地理数据库是否使用 ST_Geometry 类型,请以 sde 用户或超级用户身份从 SQL 客户端连接到数据库,然后检查 sde 用户方案中是否存在 ST_Geometry 函数。

  10. My Esri 下载 st_geometry 文件,将其放在 PostgreSQL 服务器上的 %PostgreSQL%\lib 目录下 (Microsoft Windows) 或 PostgreSQL lib 目录下 (Linux)。

    对于在 Linux 上安装 PostgreSQL,通过以 postgres 用户的身份运行 pg_config 实用程序,您可以确定 lib 目录的确切位置。 lib 位置通过 PGPKGLIBDIR 参数表示。

    使用适用于 PostgreSQL 版本和服务器操作系统的库。 已使用 PostgreSQL 库版本对文件夹进行了标注。

    • 如果在 LinuxLinux 上运行 PostgreSQL 服务器,则请以根用户身份登录到服务器并使用 FTP 将 st_geometry.so 文件传输到 PostgreSQL lib 目录下。
    • 如果在 Windows 上运行 PostgreSQL 服务器,请将 st_geometry.dll 文件复制到 PostgreSQL 安装目录下的 lib 文件夹。

您现在可以升级地理数据库。

升级地理数据

可以使用 ArcGIS AllSource 中的升级地理数据库工具或使用在 ArcGIS AllSourceArcGIS Server 计算机上运行的 Python 脚本升级地理数据库。

注:

如果地理数据库包含分支版本化数据,则可能需要附加升级后步骤。 有关说明,请参阅升级地理数据库的工作原理

使用升级地理数据库工具

可通过以下任一方式打开升级地理数据库地理处理工具:

  • 数据管理工具箱中的地理数据库管理工具集
  • ArcGIS AllSource数据库属性对话框内常规选项卡上的运行升级按钮

如果打开了数据库属性中的工具,则将使用地理数据库连接信息预填充输入地理数据库文本框。

Esri 建议选中先行检查升级地理数据库选项。 这样,在继续地理数据库升级之前,该工具将确认是否满足升级的先决条件。

先行检查将检测到地理数据库的其他活动连接、确定连接用户是否具有升级地理数据库所需的足够权限、确保数据库可支持 XML 列、确保所有数据集均可打开,以及确认数据库与库的版本相同。 如果未满足任意先决条件,则工具将终止。 再次运行升级过程之前,必须修正所有问题。

此检查的结果在地理处理工具对话框中报告。 如果检查失败,则其结果还将写入 c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product> 文件夹的 GDBUpgrade.log 文件中。

如果通过了所有检查,该工具将继续进行升级。 先行检查和升级的状态将在地理处理工具进度对话框中显示。 如果升级失败,则信息将写入 GDBUpgrade.log 文件。 其他信息将写入用户 TEMP 目录的 sde_setup.log 文件中。 如果用户未配置临时目录,则将使用系统 TEMP 目录。

运行脚本

要使用 Python 脚本升级地理数据库,请复制以下示例脚本之一,将其粘贴到文本编辑器中,对其进行修改以使用您的站点的特定信息,保存并关闭该文件,然后运行文件。

提示:

有关从 ArcGIS Server 计算机运行 Python 的信息,请参阅 ArcGIS ServerArcPy

这些示例假定您有一个以 sde 用户身份连接的现有数据库连接文件 (.sde)。 如果您没有连接文件,请在升级之前创建一个

# Name: upgradesdegdb_example.py
# Description: Uses existing database connection file
# on a Windows computer to run prerequisite check
# and upgrade an enterprise geodatabase.

# Import arcpy module
import arcpy
 
# Local variables:
Output_Workspace = "C:\\ArcGIS\connection_files\<Connection file>"
Default_gdb = "C:\\ArcGIS\connection_files\<Connection file>"

# Process: Upgrade Geodatabase
arcpy.UpgradeGDB_management(Default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
# Name: upgradesdegdb_example.py
# Description: Uses existing database connection file
# on a Linux computer to run prerequisite check
# and upgrade an enterprise geodatabase.

# Import arcpy module
import arcpy
 
# Local variables:
Output_Workspace = "<user>/connections/<Connection_file>"
Default_gdb = "<user>/connections/<Connection_file>"

# Process: Upgrade Geodatabase
arcpy.UpgradeGDB_management(Default_gdb, "PREREQUISITE_CHECK", "UPGRADE")