Name

Populate_Geometry_Columns — Ensures geometry columns are defined with type modifiers or have appropriate spatial constraints.

Synopsis

text Populate_Geometry_Columns(boolean use_typmod=true);

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

Descripción

Asegura que las columnas de geometría tienen los modificadores de tipo o restricciones espaciales apropiados para asegurar que se registran correctamente en la vista geometry_columns. Por defecto convertirá todas las columnas de geometría sin modificador de tipo en otras con modificadores de tipo.

Para la compatibilidad con versiones anteriores y para necesidades espaciales, como la herencia de tablas, donde cada tabla secundaria puede tener un tipo de geometría diferente, el comportamiento de restricción de comprobación anterior sigue siendo compatible. Si necesita el comportamiento antiguo, debe pasar el nuevo argumento opcional como falso use_typmod=false. Cuando se haga esto, las columnas de geometría se crearán sin modificadores de tipo pero tendrán 3 restricciones definidas. En particular, esto significa que cada columna geométrica que pertenezca a una tabla tiene al menos tres restricciones:

  • enforce_dims_the_geom - asegura que cada geometría posee la misma dimensión (mira en ST_NDims)

  • enforce_geotype_the_geom - asegura que cada geometría es del mismo tipo (mira en GeometryType)

  • enforce_srid_the_geom - asegura que cada geometría tiene la misma proyección (mira en ST_SRID)

Si se da una tabla oid, esta función trata de determinar el srid, la dimensión, y el tipo de geometría de todas las columnas de geometrías en la tabla, añadiendo las restricciones si es necesario. Si no hay errores, una fila apropiada se insertará en la tabla geometry_columns, si hay errores, se captura la excepción y se envía un mensaje de error con la descripción del problema.

Si se da una vista oíd, como en el caso de una tabla oíd, esta función trata de determinar el srid, la dimensión, y el tipo de geometría de todas las columnas de geometrías en la tabla, añadiendo las filas apropiadas tabla geometry_columns, pero no se ejecuta nada para hacer cumplir las restricciones.

La variante sin parámetros es un simple wrapper de la variante con parámetros que trunca y rellena la tabla geometry_columns para cada tabla y vista espacial de la base de datos, añadiendo restricciones espaciales apropiadas a cada tabla. Devuelve un sumario de los numero de columnas de geometrías detectadas en la base de datos y el numeroque se insertaron en la tabla geometry_columns. La versión con parámetros simplemente devuelve el numero de filas insertado en la tabla geometry_columns.

Disponibilidad: 1.4.0

Cambiado: 2.0.0 Por defecto, ahora utiliza modificadores de tipo en lugar de restricciones de tipo check para limitar los tipos de geometría. Puedes seguir utilizando el comportamiento de las restricciones check con el uso de la nueva variable use_typmod y estableciéndolo a false.

Mejorado: 2.0.0 el argumento opcional use_typmod fue introducido y permite controlar si las columnas se crean con modificadores de tipo o con restricciones de tipo check.

Ejemplos

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)