# Management Functions

AddGeometryColumn

Adds a geometry column to an existing table of attributes. By default uses type modifier to define rather than constraints. Pass in false for use_typmod to get old check constraint based behavior

    			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

### Description

Adds a geometry column to an existing table of attributes. The `schema_name` is the name of the table schema. The `srid` must be an integer value reference to an entry in the SPATIAL_REF_SYS table. The `type` must be a string corresponding to the geometry type, eg, 'POLYGON' or 'MULTILINESTRING' . An error is thrown if the schemaname doesn't exist (or not visible in the current search_path) or the specified SRID, geometry type, or dimension is invalid.

Changed: 2.0.0 This function no longer updates geometry_columns since geometry_columns is a view that reads from system catalogs. It by default also does not create constraints, but instead uses the built in type modifier behavior of PostgreSQL. So for example building a wgs84 POINT column with this function is now equivalent to: `ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);`

Changed: 2.0.0 If you require the old behavior of constraints use the default `use_typmod`, but set it to false.

Changed: 2.0.0 Views can no longer be manually registered in geometry_columns, however views built against geometry typmod tables geometries and used without wrapper functions will register themselves correctly because they inherit the typmod behavior of their parent table column. Views that use geometry functions that output other geometries will need to be cast to typmod geometries for these view geometry columns to be registered correctly in geometry_columns. Refer to Manual_Register_Spatial_Column.

&sfs_compliant;

&Z_support;

&curve_support;

Enhanced: 2.0.0 use_typmod argument introduced. Defaults to creating typmod geometry column instead of constraint-based.

### Examples

    -- 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

### See Also

DropGeometryColumn, DropGeometryTable, geometry_columns, Manual_Register_Spatial_Column

DropGeometryColumn

Removes a geometry column from a spatial table.

    			text DropGeometryColumn

    			varchar
    			table_name

    			varchar
    			column_name

    			text DropGeometryColumn

    			varchar
    			schema_name

    			varchar
    			table_name

    			varchar
    			column_name

    			text DropGeometryColumn

    			varchar
    			catalog_name

    			varchar
    			schema_name

    			varchar
    			table_name

    			varchar
    			column_name

### Description

Removes a geometry column from a spatial table. Note that schema_name will need to match the f_table_schema field of the table's row in the geometry_columns table.

&sfs_compliant;

&Z_support;

&curve_support;

Changed: 2.0.0 This function is provided for backward compatibility. Now that since geometry_columns is now a view against the system catalogs, you can drop a geometry column like any other table column using `ALTER TABLE`

### Examples

    			SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom');
    			----RESULT output ---
    			                  dropgeometrycolumn
    ------------------------------------------------------
     my_schema.my_spatial_table.geom effectively removed.

    -- In PostGIS 2.0+ the above is also equivalent to the standard
    -- the standard alter table.  Both will deregister from geometry_columns
    ALTER TABLE my_schema.my_spatial_table DROP column geom;

### See Also

AddGeometryColumn, DropGeometryTable, geometry_columns

DropGeometryTable

Drops a table and all its references in geometry_columns.

    			boolean DropGeometryTable

    			varchar
    			table_name

    			boolean DropGeometryTable

    			varchar
    			schema_name

    			varchar
    			table_name

    			boolean DropGeometryTable
    			varchar
    			catalog_name
    			varchar
    			schema_name
    			varchar
    			table_name

### Description

Drops a table and all its references in geometry_columns. Note: uses current_schema() on schema-aware pgsql installations if schema is not provided.

Changed: 2.0.0 This function is provided for backward compatibility. Now that since geometry_columns is now a view against the system catalogs, you can drop a table with geometry columns like any other table using `DROP TABLE`

### Examples

    SELECT DropGeometryTable ('my_schema','my_spatial_table');
    ----RESULT output ---
    my_schema.my_spatial_table dropped.

    -- The above is now equivalent to --
    DROP TABLE my_schema.my_spatial_table;

### See Also

AddGeometryColumn, DropGeometryColumn, geometry_columns

PostGIS_Extensions_Upgrade

Upgrades installed postgis packaged extensions (e.g. postgis_sfcgal, postgis_topology, postgis_sfcgal) to latest installed version. Reports full postgis version and build configuration infos after.

    			text PostGIS_Extensions_Upgrade

### Description

Upgrades installed postgis packaged extensions to latest installed version. Only extensions you have installed in the database will be upgraded and if they are already at last installed version, they will not be upgraded. Reports full postgis version and build configuration infos after. This is short-hand for doing multiple ALTER EXTENSION .. UPDATE for each postgis extension. Currently only tries to upgrade extensions postgis, postgis_sfcgal, postgis_topology, and postgis_tiger_geocoder.

Availability: 2.5.0

### Examples

    SELECT PostGIS_Extensions_Upgrade();

    NOTICE:  ALTER EXTENSION postgis_tiger_geocoder UPDATE TO "2.5.0dev";
    CONTEXT:  PL/pgSQL function postgis_extensions_upgrade() line 10 at RAISE
    NOTICE:  ALTER EXTENSION postgis_topology UPDATE TO "2.5.0dev";
    CONTEXT:  PL/pgSQL function postgis_extensions_upgrade() line 10 at RAISE

    							   postgis_extensions_upgrade
    ----------------------------------------------------------------------------------
    POSTGIS="2.5.0dev r15966" [EXTENSION] PGSQL="100"
    GEOS="3.7.0dev-CAPI-1.11.0 8fe2ce6" SFCGAL="1.3.1"
    PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.2.2, released 2017/09/15"
    LIBXML="2.7.8" LIBJSON="0.12" LIBPROTOBUF="1.2.1" TOPOLOGY RASTER
    (1 row)

### See Also

upgrading, PostGIS_GEOS_Version, PostGIS_Lib_Version, PostGIS_LibXML_Version, PostGIS_PROJ_Version, PostGIS_Version

PostGIS_Full_Version

Reports full postgis version and build configuration infos.

    			text PostGIS_Full_Version

### Description

Reports full postgis version and build configuration infos. Also informs about synchronization between libraries and scripts suggesting upgrades as needed.

### Examples

    SELECT PostGIS_Full_Version();
    							   postgis_full_version
    ----------------------------------------------------------------------------------
    POSTGIS="2.2.0dev r12699" GEOS="3.5.0dev-CAPI-1.9.0 r3989" SFCGAL="1.0.4" PROJ="Rel. 4.8.0, 6 March 2012"
    GDAL="GDAL 1.11.0, released 2014/04/16" LIBXML="2.7.8" LIBJSON="0.12" RASTER
    (1 row)

### See Also

upgrading, PostGIS_GEOS_Version, PostGIS_Lib_Version, PostGIS_LibXML_Version, PostGIS_PROJ_Version, PostGIS_Version

PostGIS_GEOS_Version

Returns the version number of the GEOS library.

    			text PostGIS_GEOS_Version

### Description

Returns the version number of the GEOS library, or `NULL` if GEOS support is not enabled.

### Examples

    SELECT PostGIS_GEOS_Version();
     postgis_geos_version
    ----------------------
     3.1.0-CAPI-1.5.0
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_Lib_Version, PostGIS_LibXML_Version, PostGIS_PROJ_Version, PostGIS_Version

PostGIS_Liblwgeom_Version

Returns the version number of the liblwgeom library. This should match the version of PostGIS.

    			text PostGIS_Liblwgeom_Version

### Description

Returns the version number of the liblwgeom library/

### Examples

    SELECT PostGIS_Liblwgeom_Version();
    postgis_liblwgeom_version
    --------------------------
    2.3.3 r15473
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_Lib_Version, PostGIS_LibXML_Version, PostGIS_PROJ_Version, PostGIS_Version

PostGIS_LibXML_Version

Returns the version number of the libxml2 library.

    			text PostGIS_LibXML_Version

### Description

Returns the version number of the LibXML2 library.

Availability: 1.5

### Examples

    SELECT PostGIS_LibXML_Version();
     postgis_libxml_version
    ----------------------
     2.7.6
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_Lib_Version, PostGIS_PROJ_Version, PostGIS_GEOS_Version, PostGIS_Version

PostGIS_Lib_Build_Date

Returns build date of the PostGIS library.

    			text PostGIS_Lib_Build_Date

### Description

Returns build date of the PostGIS library.

### Examples

    SELECT PostGIS_Lib_Build_Date();
     postgis_lib_build_date
    ------------------------
     2008-06-21 17:53:21
    (1 row)

PostGIS_Lib_Version

Returns the version number of the PostGIS library.

    			text PostGIS_Lib_Version

### Description

Returns the version number of the PostGIS library.

### Examples

    SELECT PostGIS_Lib_Version();
     postgis_lib_version
    ---------------------
     1.3.3
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_GEOS_Version, PostGIS_LibXML_Version, PostGIS_PROJ_Version, PostGIS_Version

PostGIS_PROJ_Version

Returns the version number of the PROJ4 library.

    			text PostGIS_PROJ_Version

### Description

Returns the version number of the PROJ4 library, or `NULL` if PROJ4 support is not enabled.

### Examples

    SELECT PostGIS_PROJ_Version();
      postgis_proj_version
    -------------------------
     Rel. 4.4.9, 29 Oct 2004
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_GEOS_Version, PostGIS_Lib_Version, PostGIS_LibXML_Version, PostGIS_Version

PostGIS_Scripts_Build_Date

Returns build date of the PostGIS scripts.

    			text PostGIS_Scripts_Build_Date

### Description

Returns build date of the PostGIS scripts.

Availability: 1.0.0RC1

### Examples

    SELECT PostGIS_Scripts_Build_Date();
      postgis_scripts_build_date
    -------------------------
     2007-08-18 09:09:26
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_GEOS_Version, PostGIS_Lib_Version, PostGIS_LibXML_Version, PostGIS_Version

PostGIS_Scripts_Installed

Returns version of the postgis scripts installed in this database.

    			text PostGIS_Scripts_Installed

### Description

Returns version of the postgis scripts installed in this database.

If the output of this function doesn't match the output of PostGIS_Scripts_Released you probably missed to properly upgrade an existing database. See the Upgrading section for more info.

Availability: 0.9.0

### Examples

    SELECT PostGIS_Scripts_Installed();
      postgis_scripts_installed
    -------------------------
     1.5.0SVN
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_Scripts_Released, PostGIS_Version

PostGIS_Scripts_Released

Returns the version number of the postgis.sql script released with the installed postgis lib.

    			text PostGIS_Scripts_Released

### Description

Returns the version number of the postgis.sql script released with the installed postgis lib.

Starting with version 1.1.0 this function returns the same value of PostGIS_Lib_Version. Kept for backward compatibility.

Availability: 0.9.0

### Examples

    SELECT PostGIS_Scripts_Released();
      postgis_scripts_released
    -------------------------
     1.3.4SVN
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_Scripts_Installed, PostGIS_Lib_Version

PostGIS_Version

Returns PostGIS version number and compile-time options.

    			text PostGIS_Version

### Description

Returns PostGIS version number and compile-time options.

### Examples

    SELECT PostGIS_Version();
    			postgis_version
    ---------------------------------------
     1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
    (1 row)

### See Also

PostGIS_Full_Version, PostGIS_GEOS_Version, PostGIS_Lib_Version, PostGIS_LibXML_Version, PostGIS_PROJ_Version

Populate_Geometry_Columns

Ensures geometry columns are defined with type modifiers or have appropriate spatial constraints This ensures they will be registered correctly in `geometry_columns` view. By default will convert all geometry columns with no type modifier to ones with type modifiers. To get old behavior set `use_typmod=false`

    			text Populate_Geometry_Columns

    			boolean  use_typmod=true

    			int Populate_Geometry_Columns

    			oid relation_oid
    			boolean  use_typmod=true

### Description

Ensures geometry columns have appropriate type modifiers or spatial constraints to ensure they are registered correctly in `geometry_columns` table.

For backwards compatibility and for spatial needs such as table inheritance where each child table may have different geometry type, the old check constraint behavior is still supported. If you need the old behavior, you need to pass in the new optional argument as false `use_typmod=false`. When this is done geometry columns will be created with no type modifiers but will have 3 constraints defined. In particular, this means that every geometry column belonging to a table has at least three constraints:

- `enforce_dims_the_geom` - ensures every geometry has the same dimension (see ST_NDims)

- `enforce_geotype_the_geom` - ensures every geometry is of the same type (see GeometryType)

- `enforce_srid_the_geom` - ensures every geometry is in the same projection (see ST_SRID)

If a table `oid` is provided, this function tries to determine the srid, dimension, and geometry type of all geometry columns in the table, adding constraints as necessary. If successful, an appropriate row is inserted into the geometry_columns table, otherwise, the exception is caught and an error notice is raised describing the problem.

If the `oid` of a view is provided, as with a table oid, this function tries to determine the srid, dimension, and type of all the geometries in the view, inserting appropriate entries into the `geometry_columns` table, but nothing is done to enforce constraints.

The parameterless variant is a simple wrapper for the parameterized variant that first truncates and repopulates the geometry_columns table for every spatial table and view in the database, adding spatial constraints to tables where appropriate. It returns a summary of the number of geometry columns detected in the database and the number that were inserted into the `geometry_columns` table. The parameterized version simply returns the number of rows inserted into the `geometry_columns` table.

Availability: 1.4.0

Changed: 2.0.0 By default, now uses type modifiers instead of check constraints to constrain geometry types. You can still use check constraint behavior instead by using the new `use_typmod` and setting it to false.

Enhanced: 2.0.0 `use_typmod` optional argument was introduced that allows controlling if columns are created with typmodifiers or with check constraints.

### Examples

    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)

UpdateGeometrySRID

Updates the SRID of all features in a geometry column, geometry_columns metadata and srid. If it was enforced with constraints, the constraints will be updated with new srid constraint. If the old was enforced by type definition, the type definition will be changed.

    			text UpdateGeometrySRID

    			varchar
    			table_name

    			varchar
    			column_name

    			integer
    			srid

    			text UpdateGeometrySRID

    			varchar
    			schema_name

    			varchar
    			table_name

    			varchar
    			column_name

    			integer
    			srid

    			text UpdateGeometrySRID

    			varchar
    			catalog_name

    			varchar
    			schema_name

    			varchar
    			table_name

    			varchar
    			column_name

    			integer
    			srid

### Description

Updates the SRID of all features in a geometry column, updating constraints and reference in geometry_columns. Note: uses current_schema() on schema-aware pgsql installations if schema is not provided.

&Z_support;

&curve_support;

### Examples

This will change the srid of the roads table to 4326 from whatever it was before

    SELECT UpdateGeometrySRID('roads','geom',4326);

The prior example is equivalent to this DDL statement

    ALTER TABLE roads
      ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 4326)
        USING ST_SetSRID(geom,4326);

If you got the projection wrong (or brought it in as unknown) in load and you wanted to transform to web mercator all in one shot You can do this with DDL but there is no equivalent PostGIS management function to do so in one go.

    ALTER TABLE roads
     ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 3857) USING ST_Transform(ST_SetSRID(geom,4326),3857) ;

### See Also

RT_UpdateRasterSRID, ST_SetSRID, ST_Transform