名称

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、几何类型或维度无效,则会引发错误。

[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 中。请参阅 第 4.6.3 节,“手动注册几何列”

此方法实现了 OGC 简单要素 SQL 1.1 实现规范

此函数支持 3D,并且不会删除 z 索引。

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

增强:引入了 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

另请参阅

DropGeometryColumnDropGeometryTable第 4.6.2 节“GEOMETRY_COLUMNS 视图”第 4.6.3 节“手动注册几何列”