postGISテーブルの名前を変更し、GeoServerを更新しますか?


9

postGISテーブルの名前を変更したい。ただし、これを単純な

ALTER TABLE old_name RENAME TO new_name;

私が理解しているように、空間データは新しい名前で更新されません。まず、これらの参照を関数を実行して修正できますか?

SELECT probe_geometry_columns()

この後、テーブル自体は大丈夫ですか?それとも他の対策を講じるべきでしょうか?次に、GeoServerを更新してこの新しいテーブルを見つけるにはどうすればよいですか?今のところ、上記のコマンドを実行し、GeoServerのレイヤー情報編集して新しい名前を指すようにすると、エラーが発生します(GeoServerはまだ古い名前でそれを見つけようとします)。正確に、GeoServerのレイヤー名はどこで変更する必要がありますか?

回答:


4

テーブルの名前を変更するには、2つの場所のメタデータの名前を変更する必要があります。最初にPostGISで、次にGeoserver構成で。

PostGISを変更するには、geometry_columnsを直接更新します。probe_geometriesはそのエントリをジオメトリ列に挿入する効果がありますが、すべてのテーブルのスキーマを記述し、欠落しているジオメトリ列エントリを挿入する効果もあります。テーブルがたくさんある場合、これは高くつく可能性があるので、geometry_columnsテーブルを直接更新しないのはなぜですか?

ジオサーバーを更新するには、さまざまなオプションがあります。確かに、GUIを使用して手動で行うことができますが、自動化したいと思っています。geoserverのインストールフォルダー内の構成ファイルを編集してgeoserverを再起動するシェルスクリプトを記述しますが、これも長い道のりです。RESTful呼び出しを通じてレイヤー構成を操作できるジオサーバーREST構成APIを使用することをお勧めします。

更新:

「ジオメトリ列の更新」が明確でない場合は、次の手順を実行します。

UPDATE geometry_columns set f_table_name = 'my_new_table_name' where f_table_name = 'my_old_table_name';

8年後の更新(!!!)後(2018):

以下に述べる一部の人々のように、PostGIS 2.0以降、メタデータテーブルはALTERステートメントの後に自動的に更新されます。


私の無知を許してください、しかし私はPostGISに非常に新しいので。geometry_columnsを正確に更新するにはどうすればよいですか?(パラメーターなしで)probe_関数を実行すると同じことを実行できることを理解しましたか?
Mimo

1
probe_geometry_columns trac.osgeo.org/postgis/changeset/7548から実装を確認します。データベース内のすべてのテーブルを調べ、スキーマに「geometrytype」という文字列があるかどうかを調べ、必要なエントリが存在しない場合は新しいレコードを挿入しますgeometry_columns内。それにもかかわらず、孤立したレコードはそのまま残されます。なぜそうしないのか:UPDATE geometry_columns SET f_table_name = 'new_table_name' where f_table_name = 'old_table_name'
Ragi Yaser Burhum

この番組Not Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche


7

PostGIS 2.0+では、あなたがしなければならないのは通常のことです

ALTER TABLE old_name RENAME TO new_name;

geometry_columnsビュー(またはgeography_columns)のエントリも更新されます。


3
SELECT Probe_Geometry_Columns();

便利なユーティリティです。

まず、既存のテーブルにジオメトリ列を追加すると

SELECT AddGeometryColumn('my_table', 'geo_column', 1234, 'MULTIPOINT', 2);

ジオメトリタイプの列(geo_column)を指定されたテーブル(my_table)に追加するために必要なすべての機能を関数に供給し、SRID(1234)、ジオメトリタイプ(MULTIPOINT)、次元数(2)などの重要な詳細を書き込みます。 geometry_columnsテーブル。本質的には、ALTERと3つのUPDATEです。

他の方法でジオメトリ列を作成すると(シェープファイルから読み込まれ、CREATE TABLE ASで選択されるなど)、データベース内では正常に機能しますが、外部アプリケーションからは見えない空間テーブルが生成される可能性があります。geometry_columnsに適切な詳細が保存されていない場合、投影された点、線、またはポリゴンを探すアプリケーションでは、実際のジオメトリ値は無意味な文字列として表示されます。

プローブ関数を呼び出すと、geometryタイプの各列がチェックされ、geometry_columnsに新しい値が追加されて競合が報告されます。

質問に戻りますが、GeoServerは、名前の変更がgeometry_columnsに反映されていない場合、名前が変更されたテーブルに空間データが含まれているとは考えていません。検討すべき他のことは、プローブ関数が新しいテーブル名を反映する重複レコードを作成するが、元のレコードを削除しないことです-GeoServerの別の潜在的なハングアップ。

以上のことをすべてお伝えします。1)プローブを実行してから、すぐに古いレコードを削除します。または2)geometry_columnsのALTERを使用して名前の変更を追跡し、f_table_nameの値を変更します。

言葉遣いで申し訳ありませんが、それが役に立てば幸いです。


お返事ありがとうございます。私は今、postGISをよりよく理解し始めています。それでも、私がとるべき必要な手順が少しわかりません。最初に名前の変更を実行してから、probe()を実行する必要がありますか?geometry_columnsを変更するにはどうすればよいですか?
Mimo

geometry_columnsを変更する最も簡単な方法は、pgAdminを開いてテーブルを右クリックし、ビューデータを選択して、すべての行を表示を選択し、古いテーブル名を含むセルをクリックして、新しいテーブル名を入力することです。または、UPDATE geometry_columns SET f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' AND f_table_name = 'old_table_name'
rec.thegeom

1

SELECT probe_geometry_columns()の機能はわかりませんが、geometry_columnsテーブルを簡単にチェックして、新しいテーブル名がそこにあるかどうか、または古いテーブル名を指しているかどうかを確認できます。

変更を「通知」するために、GeoServerストアをリロードする必要があると思います。別の方法としては、停止と開始でそれを行うことができます。


「GeoServerストアを再ロードする」とはどういう意味ですか?
Mimo

ステータスページ(docs.geoserver.org/latest/en/user/webadmin/server/status.html)には、再読み込みボタンがあります。
Ian Turton

ありがとう。ただし、リロードは機能しませんでした。名前が変更されたレイヤーが見つからないという文句を言うGeoServerエラーが引き続き表示されます。それはまだ古い名前でそれを見つけようとします。
Mimo

新しいテーブル名を指すようにレイヤー定義を変更しましたか?
Ian Turton
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.