Name

Populate_Geometry_Columns — 确保使用类型修饰符定义几何图形列或具有适当的空间约束。

Synopsis

text Populate_Geometry_Columns(boolean use_typmod=true);

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

描述

确保几何图形列具有适当的类型修饰符或空间约束,以确保它们在 geometry_columns 查看。默认情况下,会将所有没有类型修饰符的几何图形列转换为有类型修饰符的几何图形列。

出于向后兼容性和空间需求(如表继承,其中每个子表可能具有不同的几何类型),仍然支持旧的CHECK约束行为。如果需要旧的行为,则需要将新的可选参数作为False传递 use_typmod=false 。完成此操作后,将创建不带类型修饰符的几何柱,但将定义3个约束。特别是,这意味着属于表的每个几何图形列至少有三个约束:

  • enforce_dims_geom -确保每个几何图形具有相同的尺寸(请参见 ST_NDims )

  • enforce_geotype_geom -确保每个几何图形的类型相同(请参见 GeometryType )

  • enforce_srid_geom -确保每个几何图形都在同一投影中(请参见 ST_SRID )

如果一张数据表 oid 时,此函数尝试确定表中所有几何图形列的sRID、尺寸和几何图形类型,并根据需要添加约束。如果成功,则在GEOMETRY_COLUMNS表中插入适当的行,否则将捕获异常并引发描述问题的错误通知。

如果 oid 时,此函数尝试确定视图中所有几何图形的sRID、尺寸和类型,并将适当的条目插入 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) );
-- This will now use typ modifiers.  For this to work, there must exist data
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) |
-- This will change the geometry columns to use constraints if they are not typmod or have constraints already.
--For this to work, there must exist data
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)