Name

AddGeometryColumn — 将geometry(几何)列添加到现有表。

Synopsis

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 表中条目的整数值引用。 类型 必须是与几何类型相对应的字符串,例如 'POLYGON' 或 'MULTILINESTRING' 。如果 schemaname 不存在(或在当前 search_path 中不可见)或指定的 SRID、几何类型或维度无效,则会引发错误。

[Note]

更改:2.0.0 此函数不再更新geometry_columns,因为geometry_columns 是从系统目录读取的视图。默认情况下,它也不创建约束,而是使用 PostgreSQL 内置的类型修饰符行为。 因此,例如,使用此函数构建wgs84 POINT 列现在相当于: ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);

更改:2.0.0 如果您需要约束的旧行为,请使用默认的use_typmod,但将其设置为 false。

[Note]

更改:2.0.0 视图不能再在 Geometry_columns 中手动注册,但是根据几何 Typmod 表几何图形构建并在没有包装器函数的情况下使用的视图将正确注册自身,因为它们继承了父表列的 Typmod 行为。 使用输出其他几何图形的几何函数的视图需要转换为typmod 几何图形,以便这些视图几何列能够在geometry_columns 中正确注册。请参阅Section 4.6.3, “手动注册几何列”

此方法实现了 SQL 1.1 的 OGC 简单功能规范。

该函数支持 3d 并且不会丢失 z-index。

此方法支持圆形字符串和曲线。

增强:2.0.0 引入了 use_typmod 参数。 默认创建typmod几何列而不是基于约束。

示例

-- Create schema to hold data
CREATE SCHEMA my_schema;
-- Create a new simple PostgreSQL table
CREATE TABLE my_schema.my_spatial_table (id serial);

-- Describing the table shows a simple table with a single "id" column.
postgis=# \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)

-- Add a spatial column to the table
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom',4326,'POINT',2);

-- Add a point using the old constraint based behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',2, false);

--Add a curvepolygon using old constraint behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geomcp_c',4326,'CURVEPOLYGON',2, false);

-- Describe the table again reveals the addition of a new geometry columns.
\d my_schema.my_spatial_table
                            addgeometrycolumn
-------------------------------------------------------------------------
 my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2
(1 row)

                                    Table "my_schema.my_spatial_table"
  Column  |         Type         |                                Modifiers
----------+----------------------+-------------------------------------------------------------------------
 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 view also registers the new 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