PostgreSQL でのジオデータベースのアップグレード

Standard または Advancedのライセンスで利用可能。

エンタープライズ ジオデータベースをアップグレードする目的は、新機能と修正された不具合を利用するために、ジオデータベースのシステム テーブル、ストアド プロシージャ、タイプ、および機能を更新することです。 使用しているデータベース バージョンが使用する ArcGIS クライアントでサポートされなくなった場合、データベースもアップグレードする必要があります。

ArcGIS Pro または ArcGIS Server の最新バージョンをインストールするか、サービス パック、パッチ、またはホット フィックスを既存のインストールに適用し、ジオデータベースをアップグレードします。

注意:

ジオデータベースをアップグレードしなかった場合でも、使用しているデータベース バージョンが最新のリリースの ArcGIS ソフトウェアでサポートされなくなることがあります。 システム要件を必ず確認して、サポートされているデータベース リリースを引き続き使用するようにしてください。 そのデータベース バージョンがサポートされなくなった場合、ジオデータベースをアップグレードする必要があります。 アップグレードの間隔が長くなるほど、アップグレード プロセスが複雑になります。

ArcGIS Pro 3.3 を使用してジオデータベースをアップグレードする場合、アップグレードされたジオデータベースのバージョンは 11.3.0 になります。

アップグレードの前に必要な手順を完了してから、[ジオデータベースのアップグレード (Upgrade Geodatabase)] ジオプロセシング ツールまたは Python スクリプトを使用してジオデータベースをアップグレードします。

アップグレードする前に

ジオデータベースを含め、エンタープライズ システムをアップグレードする前に、まず計画を立てます。 開発サーバーまたはテスト サーバーで新しいバージョンをテストして、すべてのクライアント アプリケーションで動作することを確認します。

新しいシステムが想定したとおりに機能することが確認できたら、アップグレードのスケジュールを設定します。アップグレードに必要な人員を確保し、各担当者が割り当てられたタスクを実行するために必要な権限を持っていることを確認します。

次の点に注意してください。

  • ベータまたはプレリリース バージョンのソフトウェアからのアップグレードはサポートされません。
  • PostgreSQL データベースのリリースが ArcGIS の最新リリースでサポートされている場合は、10.9.x または 11.x のジオデータベースから直接アップグレードできます。

    PostgreSQL データベースが最新のリリースのジオデータベースでサポートされていない場合、ジオデータベースを最新のリリースにアップグレードするには、データベースとジオデータベースを複数回アップグレードする必要があります。 ジオデータベースをアップグレードする間隔が長くなるほど、最新リリースのジオデータベースにするために必要なアップグレードの回数が増えます。

    たとえば、次のシナリオでは、データベースとジオデータベースをそれぞれ 2 回アップグレードする必要があります。

    かなり古いバージョンのジオデータベースからアップグレードする場合は、複数ステップの手順を実行してデータベースとジオデータベースをアップグレードする必要があります。

    ジオデータベースの中間アップグレードでは、そのジオデータベース バージョンのアップグレード手順に従い、バージョンを移行するたびにジオデータベースをテストします。 同様に、データベース ベンダーから提供されている各データベース バージョンのアップグレード手順に従い、バージョンを移行するたびにテストします。

  • ジオデータベースを以前のバージョンにダウングレードするための正式なメカニズムはありません。 新しいバージョンにアップグレードした後でジオデータベースをダウングレードする場合は、古いジオデータベース バージョンを含むバックアップ ファイルからデータベースを復元することができます。
  • ST_Geometry 空間タイプを使用する 11.2.0 のジオデータベースからアップグレードする場合、アップグレード プロセスを実行すると、ST_Geometry 列で定義済みの空間インデックスが削除されてから再作成されます。

以下は、ジオデータベースをアップグレードする前に実行する手順のチェックリストです。

  1. 使用する PostgreSQL と ArcGIS バージョンの組み合わせが Esri でサポートされているかどうかを確認するには、「PostgreSQL に関する ArcGIS の要件」をご参照ください。

    PostgreSQL データベースをアップグレードする必要がある場合は、PostgreSQL のドキュメントで、データベース管理システムの新機能とアップグレード方法を確認してください。 アップグレードしたデータベースの名前と所有者は、必ずアップグレード前と同じでなければなりません。 また、データベースの search_path 変数を "$user"public、および sde に設定します。

  2. sde ユーザーとして認証するデータベース接続を作成します。
  3. ジオデータベースをアップグレードできるかどうかを確認します。

    これには、移行先の ArcGIS クライアント バージョンを 1 台のコンピューターにインストールします。 ArcGIS Pro をインストールした場合、前のステップで作成した接続を使用してジオデータベースに接続し、[データベース プロパティ] ダイアログ ボックスを開いて、ジオデータベースをアップグレードできるかどうかを確認します。 ArcGIS Server (エンタープライズ エディション) をインストールした場合、前のステップで作成した接続ファイルと ArcPyDescribe 関数を使用して、次の例に示すようにジオデータベースをアップグレードできるかどうかを確認できます。

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

    False が返された場合、ジオデータベースをアップグレードできます。 True が返された場合、ジオデータベースをアップグレードする必要はありません。 以降の手順を省略してください。

  4. データベースのバックアップを作成します。
  5. ArcGIS の外部で、ArcGIS ジオデータベース システム テーブルに追加したカスタム機能 (トリガーや追加のインデックスなど) をすべて削除します。

    アップグレード手順は、ユーザーがシステム テーブルに加えたカスタマイズに対応できません。 このようなカスタマイズによってシステム テーブルのスキーマ変更が妨げられた場合、アップグレードが失敗します。

  6. データベース管理者は、ジオデータベースのアップグレードに必要な権限を sde ユーザーに付与する必要があります。

    必要な権限については、「PostgreSQL でのジオデータベースの権限」をご参照ください。

  7. アップグレード対象のジオデータベースへの接続がないことを確認します。

    ジオデータベースに現在接続しているユーザーのリストを確認するには、ArcGIS Pro[ジオデータベース管理] ダイアログ ボックスを開きます。

  8. ジオデータベースで ST_Geometry タイプが使用されている場合は、次の手順を実行します。 使用されていない場合は、ジオデータベースのアップグレードに進むことができます。

    ジオデータベースで ST_Geometry タイプが使用されているかどうかがわからない場合は、SQL クライアントから sde ユーザーまたはスーパーユーザーとしてデータベースに接続し、sde ユーザーのスキーマに ST_Geometry 関数が存在するかどうかを確認します。

  9. My Esri から st_geometry ファイルをダウンロードして、そのファイルを PostgreSQL サーバーの %PostgreSQL%\lib ディレクトリ (Microsoft Windows の場合) または PostgreSQL lib ディレクトリ (Linux の場合) に配置します。

    LinuxPostgreSQL をインストールするための lib ディレクトリの正確な場所を確認するには、postgres ユーザーとして pg_config ユーティリティを実行します。 lib の場所は PGPKGLIBDIR パラメーターで示されます。

    PostgreSQL のバージョンおよびサーバーのオペレーティング システムに対応するライブラリを使用します。 各フォルダーには、PostgreSQL ライブラリのバージョンのラベルが付けられています。

    • PostgreSQL サーバーで Linux が動作している場合は、root ユーザーとしてサーバーにサイン インし、FTP を使用して st_geometry.so ファイルを PostgreSQLlib ディレクトリに転送します。
    • PostgreSQL サーバーで Windows が動作している場合は、st_geometry.dll ファイルを PostgreSQL インストール ディレクトリの lib フォルダーにコピーします。

これで、ジオデータベースをアップグレードできるようになりました。

ジオデータベースのアップグレード

ArcGIS Pro[ジオデータベースのアップグレード (Upgrade Geodatabase)] ツール、または ArcGIS Pro または ArcGIS Server コンピューターで実行する Python スクリプトを使用して、ジオデータベースをアップグレードできます。

注意:

ジオデータベースにブランチ バージョン対応データが含まれている場合は、追加のアップグレード後の手順が必要になる場合があります。 手順については、「ジオデータベースのアップグレード (Upgrade Geodatabase) の詳細」をご参照ください。

[ジオデータベースのアップグレード (Upgrade Geodatabase)] ツールの使用

[ジオデータベースのアップグレード (Upgrade Geodatabase)] ジオプロセシング ツールは、次のいずれかから開きます。

  • データ管理ツールボックス内のジオデータベース管理ツールセット
  • ArcGIS Pro 内の [データベース プロパティ] ダイアログ ボックスの [一般] タブにある [アップグレードの実行] ボタン

[データベース プロパティ] からツールを開いた場合、[入力ジオデータベース] テキスト ボックスにジオデータベース接続情報が事前に入力されています。

Esri では、[前提条件を確認] および [ジオデータベースをアップグレード] オプションをオンのままにすることをお勧めします。 これにより、ジオデータベースのアップグレードを続ける前に、アップグレードを行うための前提条件を満たしているかどうかが確認されます。

前提条件のチェックでは、ジオデータベースへの他のアクティブな接続が検出され、接続しているユーザーにジオデータベースをアップグレードするための十分な権限があるかどうか、データベースが XML 列に対応しているかどうか、すべてのデータセットを開くことができるかどうか、データベースとライブラリのリリースが同じかどうかが確認されます。 前提条件のいずれかが満たされていない場合、ツールは終了します。 アップグレードの手順を再度実行する前に、問題を修正する必要があります。

確認の結果は、ジオプロセシング ツールのダイアログ ボックスで報告されます。 チェックで不合格になった場合は、c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product> フォルダーにある GDBUpgrade.log ファイルにも結果が書き込まれます。

すべてのチェックに合格した場合、ツールはアップグレードに進みます。 前提条件チェックとアップグレードの状態は、ジオプロセシング ツールの進行状況を示すダイアログ ボックスに表示されます。 アップグレードが失敗すると、情報が GDBUpgrade.log ファイルに書き込まれます。 ユーザーの TEMP ディレクトリにある sde_setup.log ファイルに追加情報が書き込まれます。 ユーザーが一時ディレクトリを構成していない場合は、システムの TEMP ディレクトリが使用されます。

スクリプトの実行

Python スクリプトを使用してジオデータベースをアップグレードするには、以下のサンプル スクリプトのいずれかをテキスト エディターにコピーします。 環境の情報に合わせて、変数の値を変更します。

  • sde ユーザーとして接続しているデータベース接続ファイルがすでに存在する場合は、お使いのオペレーティング システムに適用するスクリプトをコピーしてテキスト エディターに貼り付け、環境に固有の情報を使用するように変更し、そのファイルを保存して閉じた後で、次のスクリプトを実行します。
    # Name: upgradesdegdb_example.py
    # Description: Connect from a Windows computer 
    # with an existing database connection file 
    # and upgrade an enterprise geodatabase in PostgreSQL
    
    # 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: Connect from a Linux computer 
    # with an existing database connection file 
    # and upgrade an enterprise geodatabase in PostgreSQL
    
    # 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")
  • アップグレードのスクリプティングを行うコンピューター上にデータベース接続ファイルがない場合、次のスクリプトをコピーして、環境に固有の情報をコマンド ラインに入力できます。
    """
    Name: upgrade_gdb.py
    Description: Provide connection information to an Enterprise geodatabase 
    and upgrade the geodatabase
    Type upgrade_gdb.py -h or upgrade_gdb.py --help for usage
    """
    
    # Import system modules
    import arcpy
    import os
    import optparse
    import sys
    
    
    # Define usage and version
    parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 2.0; valid for 10.1 only")
    
    #Define help and options
    parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQLSERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS',''], default="", help="Type of enterprise DBMS:  SQLSERVER, ORACLE, or POSTGRESQL.")
    parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name")
    parser.add_option ("--auth", dest="account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive):  DATABASE_AUTH, OPERATING_SYSTEM_AUTH.  Default=DATABASE_AUTH")
    parser.add_option ("-u", dest="User", type="string", default="", help="Geodatabase administrator user name")
    parser.add_option ("-p", dest="Password", type="string", default="", help="Geodatabase administrator password")
    parser.add_option ("--upgrade", dest="Upgrade", type="choice", choices=['TRUE', 'FALSE'], default="FALSE", help="Upgrade Options (case-sensitive):  TRUE=Perform Pre-requisite check and upgrade geodatabase, FALSE=Perform Pre-requisite check only.  Default=FALSE")                   
    parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
    
    
    # Check if value entered for option
    try:
    	(options, args) = parser.parse_args()
    
    	
    #Check if no system arguments (options) entered
    	if len(sys.argv) == 1:
    		print("%s: error: %s\n" % (sys.argv[0], "No command options given"))
    		parser.print_help()
    		sys.exit(3)
    
    	#Usage parameters for spatial database connection to upgrade
    	account_authentication = options.account_authentication.upper()
    	username = options.User.lower() 
    	password = options.Password	
    	do_upgrade = options.Upgrade
    	database = options.Database.lower()
    	database_type = options.Database_type.upper()
    	instance = options.Instance
    	
    	if (database_type == ""):
    		print("\nDatabase type must be specified!\n")
    		parser.print_help()
    		sys.exit(3)
    	
    	if (database_type == "SQLSERVER"):
    		database_type = "SQL_SERVER"
    	
    	# Get the current product license
    	product_license=arcpy.ProductInfo()
    	
    	# Checks required license level to upgrade
    	if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
    		print("\n" + product_license + " license found!" + "  Enterprise geodatabase upgrade requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license.")
    		sys.exit("Re-authorize ArcGIS before upgrading.")
    	else:
    		print("\n" + product_license + " license available!  Continuing to upgrade...")
    		arcpy.AddMessage("+++++++++")
    	
    	# Local variables
    	instance_temp = instance.replace("\\","_")
    	instance_temp = instance_temp.replace("/","_")
    	instance_temp = instance_temp.replace(":","_")
    	Conn_File_NameT = instance_temp + "_" + database + "_" + username     
    	
    	if os.environ.get("TEMP") == None:
    		temp = "c:\\temp"	
    	else:
    		temp = os.environ.get("TEMP")
    	
    	if os.environ.get("TMP") == None:
    		temp = "/usr/tmp"		
    	else:
    		temp = os.environ.get("TMP")  
    	
    	Connection_File_Name = Conn_File_NameT + ".sde"
    	Connection_File_Name_full_path = temp + os.sep + Conn_File_NameT + ".sde"
    	
    	# Check for the .sde file and delete it if present
    	arcpy.env.overwriteOutput=True
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    	
    	print("\nCreating Database Connection File...\n")
    	# Process: Create Database Connection File...
    	# Usage:  out_file_location, out_file_name, DBMS_TYPE, instnace, database, account_authentication, username, password, save_username_password(must be true)
    	arcpy.CreateDatabaseConnection_management(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=username, password=password, save_user_pass="TRUE")
            for i in range(arcpy.GetMessageCount()):
    		if "000565" in arcpy.GetMessage(i):   #Check if database connection was successful
    			arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("\n+++++++++")
    			arcpy.AddMessage("Exiting!!")
    			arcpy.AddMessage("+++++++++\n")
    			sys.exit(3)            
    		else:
    			arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("+++++++++\n")
    			
    	# Check whether geodatabase needs upgrade
    	isCurrent = arcpy.Describe(Connection_File_Name_full_path).currentRelease
    	
    	if isCurrent == True:
    		print("The geodatabase is already at the current release and cannot be upgraded!")
    		sys.exit("Upgrade did not run.")
    	
    	
    	# Process: Upgrade geodatabase...
    	try:
    		if do_upgrade.lower() == "true":
    			print("Upgrading Geodatabase...\n")
    			arcpy.UpgradeGDB_management(input_workspace=Connection_File_Name_full_path, input_prerequisite_check="PREREQUISITE_CHECK", input_upgradegdb_check="UPGRADE")
    			for i in range(arcpy.GetMessageCount()):
    				arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("+++++++++\n")
    	
    		else:
    			print("Running Pre-Requisite Check...\n")
    			arcpy.UpgradeGDB_management(input_workspace=Connection_File_Name_full_path, input_prerequisite_check="PREREQUISITE_CHECK", input_upgradegdb_check="NO_UPGRADE")
    			for i in range(arcpy.GetMessageCount()):
    				arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("+++++++++\n")
    		
    	        
    	except:
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    		
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    	
    #Check if no value entered for option	
    except SystemExit as e:
    	if e.code == 2:
    		parser.usage = ""
    		print("\n")
    		parser.print_help()
    		parser.exit(2)
    たとえば、テキスト ファイルを gdbupgrade として保存し、データベース クラスターが mypgdbcluster、データベースが mypgdb である場合、コマンド プロンプトで以下を入力します。

    gdbupgrade --DBMS POSTGRESQL -i mypgdbcluster --auth DATABASE_AUTH -u sde -p mysdepassword --upgrade TRUE -D mypgdb