[postgis-users] Small question about GEOMETRY typmod registration in geometry_columns
Jorge Gustavo Rocha
jgr at di.uminho.pt
Mon May 4 07:01:43 PDT 2020
Hi,
To prevent an improper registration of GEOMETRY columns in the
geometry_columns view, I'm using the following workaround:
CREATE TABLE place (
id uuid NOT NULL DEFAULT uuid_generate_v1mc() PRIMARY KEY,
name varchar(255) not NULL,
geom geometry(GEOMETRY,3763) NOT null,
CONSTRAINT line_or_polygon CHECK (geometrytype(geom) in ('GEOMETRY',
'LINESTRING', 'POLYGON'))
);
select f_table_name, type from geometry_columns gc where f_table_name =
'place';
f_table_name|type |
------------|--------|
place |GEOMETRY|
Can this workaround have any adverse side effect?
With this CONSTRAINT, I'm able to insert just POLYGON or LINESTRING
features. The geometry_columns view type is GEOMETRY, so applications
like QGIS can ask the use if he wants to use a LINESTRING layer or
POLYGON layer.
Regards,
Jorge Gustavo
On 03/05/20 23:05, Jorge Gustavo Rocha wrote:
> Hi Postgisers,
>
> If I create a new table with a generic GEOMETRY column, it is properly
> registered in geometry_columns view as type GEOMETRY.
>
> Example:
>
> CREATE TABLE place (
> id uuid NOT NULL DEFAULT uuid_generate_v1mc() PRIMARY KEY,
> name varchar(255) not NULL,
> geom geometry(GEOMETRY,3763) NOT NULL
> );
>
> select f_table_name, type from geometry_columns gc where f_table_name =
> 'place';
>
> Perfect, as expected!
>
> f_table_name|type |
> ------------|--------|
> place |GEOMETRY|
>
> Problem
>
> I want to restrict this generic GEOMETRY column just to LINESTRING and
> POLYGON geometries.
>
> To do so, I use the same typmod geometry(GEOMETRY,3763) and an
> additional CONSTRAINT, like:
>
> CREATE TABLE place (
> id uuid NOT NULL DEFAULT uuid_generate_v1mc() PRIMARY KEY,
> name varchar(255) not NULL,
> geom geometry(GEOMETRY,3763) NOT null,
> CONSTRAINT line_or_polygon CHECK (geometrytype(geom) = 'LINESTRING' OR
> geometrytype(geom) = 'POLYGON')
> );
>
> If I do so, the column is registered as LINESTRING and not GEOMETRY.
>
> select f_table_name, type from geometry_columns gc where f_table_name =
> 'place';
>
> f_table_name|type |
> ------------|----------|
> place |LINESTRING|
>
> For me, it would make sense to have it registered as GEOMETRY, not
> LINESTRING (or POLYGON). Shouldn't it be based just on the typmod?
>
> Best regards,
>
> J. Gustavo
>
J. Gustavo
--
Jorge Gustavo Rocha
Departamento de Informática
Universidade do Minho
4710-057 Braga
Gabinete 3.29 (Piso 3)
Tel: +351 253604480
Fax: +351 253604471
Móvel: +351 910333888
skype: nabocudnosor
More information about the postgis-users
mailing list