名前

Populate_Geometry_Columns — ジオメトリカラムが型修飾子で定義されるか、適切な制約を持つことを確実にします。ジオメトリカラムがgeometry_columnsに正しく登録されることを確実にします。デフォルトでは、型修飾子によらないジオメトリカラムを型修飾子によるジオメトリカラムに変換します。以前の挙動にするにはuse_typmod=falseとします。

概要

text Populate_Geometry_Columns(boolean use_typmod=true);

int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);

説明

ジオメトリカラムがgeometry_columnsに正しく登録されるために、ジオメトリカラムが型修飾子で定義されるか、適切な制約を持つことを確実にします。

ことを確実にします。デフォルトでは、型修飾子によらないジオメトリカラムを型修飾子によるジオメトリカラムに変換します。以前の挙動にするにはuse_typmod=falseとします。

古い制約をチェックする挙動は現在も対応しています。後方互換のためであるのと、子テーブルが異なるジオメトリタイプを持ち得るテーブル継承といった場合に使われます。古い挙動が必要な場合には、新しいオプション引数についてuse_typmod=falseを渡します。これにより型修飾子を使わないジオメトリカラムの作成が行われ、3つの定義された制約を持ちます。特に、これはテーブルに属するあらゆるジオメトリカラムが少なくとも次の3つの制約を持つことを意味します。

  • enforce_dims_the_geom - あらゆるジオメトリが同じ次元を持つことを確実にします(ST_NDimsをご覧下さい)

  • enforce_geotype_the_geom - あらゆるジオメトリが同じ型を持つことを確実にします(GeometryTypeをご覧下さい)

  • enforce_srid_the_geom - あらゆるジオメトリが同じ投影法になることを確実にします(ST_SRIDをご覧下さい)

テーブルにoidがある場合には、この関数はテーブルのジオメトリカラム全てについて、SRIDと次元とジオメトリタイプを判定して、必要に応じて制約を追加しようとします。 成功した場合には、geometry_columnsに適切な行が追加され、その他の場合には、例外が捕まえられ、問題を記述したエラーが通知されます。

ビューのoidがある場合、テーブルの場合と同じで、SIRDと次元とジオメトリタイプを判定して、適切なエントリをgeometry_columnsテーブルに挿入しますが、制約の追加はされません。

パラメタの無い版は、geometry_columnsの行を削除したうえで、全ての空間テーブルと空間ビューについて再挿入し、適切な空間制約をテーブルに追加する、パラメタ付き版の単純なラッパです。パラメタ無し版は、検出したジオメトリカラムの数の要約とgeometry_columnsに挿入された行の数とを返します。パラメタ付き版は単純にgeometry_columnsに挿入された行の数を返します。

初出: 1.4.0

変更: 2.0.0では、ジオメトリタイプへの制約をチェックする替りに型修飾子を使用しています。use_typmodをfalseに設定して使うことで、制約をチェックすることができます。

機能強化: 2.0.0では、use_typmod引数が導入されました。カラムが型修飾子で作られるか制約チェックで作られるかの制御ができます。

CREATE TABLE public.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
-- 型修飾子を使います。データが存在しないと動作しません。
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);

populate_geometry_columns
--------------------------
                        1
                        
                        
\d myspatial_table

                                   Table "public.myspatial_table"
 Column |           Type            |                           Modifiers                           
--------+---------------------------+---------------------------------------------------------------
 gid    | integer                   | not null default nextval('myspatial_table_gid_seq'::regclass)
 geom   | geometry(LineString,4326) | 
-- 型修飾子を使っていなくて既に制約を持っている場合に
-- ジオメトリカラムを変更して制約を使うようにします。
-- データが存在しないと動作しません。
CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);
INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false);
populate_geometry_columns
--------------------------
                        1
\d myspatial_table_cs

                          Table "public.myspatial_table_cs"
 Column |   Type   |                            Modifiers                             
--------+----------+------------------------------------------------------------------
 gid    | integer  | not null default nextval('myspatial_table_cs_gid_seq'::regclass)
 geom   | geometry | 
Check constraints:
    "enforce_dims_geom" CHECK (st_ndims(geom) = 2)
    "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)
    "enforce_srid_geom" CHECK (st_srid(geom) = 4326)