名前

AddGeometryColumn — ジオメトリーカラムを既存のテーブルに追加します。

概要

text AddGeometryColumn(varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

説明

ジオメトリーカラムを既存の属性テーブルに追加します。schema_nameはスキーマ名です。sridは SPATIAL_REF_SYS テーブルのエントリを参照する整数でなければなりません。typeは'POLYGON'や'MULTILINESTRING'といった、ジオメトリータイプを示す文字でなければなりません。指定したスキーマが存在しない (または現在の search_path からは見えない) 場合、または指定した SRID、ジオメトリータイプもしくは次元が不正である場合はエラーが投げられます。

Changed: 2.0.0 geometry_columns がシステムカタログを読むビューになったため、geometry_columns を更新しないようになりました。デフォルトでは制約を生成せず、PostgreSQL の型修飾子を使います。この関数による WGS 84の POINT カラムの構築とALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);とは等価です。

Changed: 2.0.0 制約を使う必要がある場合には、use_typmodをFALSE にします。

Changed: 2.0.0 ビューについては、geometry_columns への手動登録はできなくなりました。しかし、typmod テーブルジオメトリーに対して構築されていて、かつラッパ関数が無いビューは、親テーブルカラムの typmod の挙動を継承するので、正しく登録されます。他のジオメトリーを出力するジオメトリー関数を使うビューについては、ビューのジオメトリーカラムが正しく登録されるようにするため、typmod ジオメトリーへのキャストが必要です。「手動でジオメトリーカラムを geometry_columns に登録する」を参照して下さい。

このメソッドはOGC Simple Features Implementation Specification for SQL 1.1の実装です。

この関数は3次元に対応し、Z値を削除しません。

このメソッドは曲線ストリングと曲線に対応しています。

Enhanced: 2.0.0 use_typmod 引数が導入されました。デフォルトでは制約を基にしたものでなく typmod ジオメトリーカラムが生成されます。

この例ではデータを保持するスキーマーを生成します。

コード
CREATE SCHEMA my_schema;

スキーマー内に単純な PostgreSQL テーブルを生成します。

コード
CREATE TABLE my_schema.my_spatial_table (id serial);

テーブルの詳細情報でidカラムを出力します。

コード
\d my_schema.my_spatial_table
出力
Table "my_schema.my_spatial_table"
 Column |  Type   |                                Modifiers
--------+---------+-------------------------------------------------------------------------
 id     | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)

空間ラカムをテーブルに追加します。

コード
SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geom', 4326, 'POINT', 2);

古い制約を基にした手法でポイントを追加します。

コード
SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geom_c', 4326, 'POINT', 2, false);

古い制約を基にした手法で曲線ポリゴンを追加します。

コード
SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geomcp_c', 4326, 'CURVEPOLYGON', 2, false);
出力
my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2

新しいカラムについてみるためにテーブルの詳細情報を見ます。

コード
\d my_schema.my_spatial_table
出力
Table "my_schema.my_spatial_table"

Columns:
  id       integer               not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)
  geom     geometry(Point,4326)
  geom_c   geometry
  geomcp_c geometry

Check constraints:
    "enforce_dims_geom_c" CHECK (st_ndims(geom_c) = 2)
    "enforce_dims_geomcp_c" CHECK (st_ndims(geomcp_c) = 2)
    "enforce_geotype_geom_c" CHECK (geometrytype(geom_c) = 'POINT'::text OR geom_c IS NULL)
    "enforce_geotype_geomcp_c" CHECK (geometrytype(geomcp_c) = 'CURVEPOLYGON'::text OR geomcp_c IS NULL)
    "enforce_srid_geom_c" CHECK (st_srid(geom_c) = 4326)
    "enforce_srid_geomcp_c" CHECK (st_srid(geomcp_c) = 4326)

geometry_columnsビューは新しいカラムを登録しています。

コード
SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';
出力
col_name |     type     | srid | ndims
----------+--------------+------+-------
 geom     | Point        | 4326 |     2
 geom_c   | Point        | 4326 |     2
 geomcp_c | CurvePolygon | 4326 |     2