このドキュメントでは、OceanBaseデータベースで空間列を作成する方法について説明します。
前提条件
GIS機能を使用する前に、業務テナントでGISメタデータを設定する必要があります。サーバーに接続した後、以下のコマンドを実行して、default_srs_data_mysql.sql ファイルをデータベースにインポートします:
注意
このインポートコマンドはSYSテナントでのみ実行できます。コマンド実行時にデータはプライマリテナントに書き込まれ、スタンバイテナントに同期されます。
-- module はインポートするモジュールを示します。
-- tenant はインポートするテナントを示します。
-- infile はインポートするSQLファイルの相対パスを示します。
ALTER SYSTEM LOAD MODULE DATA module=gis tenant=mysql infile = 'etc/default_srs_data_mysql.sql';
ステートメント構文の詳細については、LOAD MODULE DATAを参照してください。
以下の結果が返された場合、データファイルのインポートが成功したことを意味します:
Query OK, 0 rows affected
例
OceanBaseデータベースでは、CREATE TABLE または ALTER TABLE を使用して空間列を作成できます。
CREATE TABLE ステートメントを使用して空間列を持つテーブルを作成する構文例は以下のとおりです:
CREATE TABLE geom (g GEOMETRY);
ALTER TABLE ステートメントを使用して既存のテーブルに空間列を追加または削除する構文例は以下のとおりです:
ALTER TABLE geom ADD pt POINT;
ALTER TABLE geom DROP pt;
以下の例では、さまざまな幾何学的型を持つテーブルの作成方法を示します:
obclient> CREATE TABLE geom (
p POINT SRID 0,
g GEOMETRY NOT NULL SRID 4326
);
Query OK, 0 rows affected
空間列に関連する制約事項は以下のとおりです:
空間列を定義する際に、SRIDを明示的に指定できます。列にSRIDが定義されていない場合、クエリ時にオプティマイザーは空間インデックスを選択しませんが、挿入/更新時にはインデックスレコードが生成されます。
空間列に
NOT NULL制約を指定し、かつSRIDを指定した後、その空間列に空間インデックスを定義できます。つまり、SRIDが定義された列であって初めて空間インデックスを使用できます。空間列にSRIDを定義した後、他のSRID値を挿入するとエラーが発生します。
SRID に関連する制約事項は以下のとおりです:
空間列に
SRIDが明示的に指定されていること。列上のすべてのオブジェクトの
SRIDが同じである必要があります。