Some databases support literals of the various GEO
type, for example in Postgres, you can do:
SELECT POINT '1,1';
And in Postgres it enforces the sub-type at the column level:
SELECT POINT '1,1' UNION ALL SELECT LINE '0,0,1,1';
ERROR: UNION could not convert type line to point
However, some databases allow using various GEO
types in the same column (such as BigQuery, as one example).
- Is it possible to use the
GEO
|GEOMETRY
|GEOGRAPHY
keyword itself for literal creation, for example something likeSELECT GEO '1,1' FROM tbl
? - Is it possible to have a
GEO
column that supports any sub-type within it?
2
Answers
The following code seems to do the job.
Having said that, the fact that we can do something doesn’t necessarily mean we should do it.
A similar post states:
Fiddle
In addition to David’s answer, the thing about Geo type in PostgreSQL, you should distinguish between
The GEOMETRY and/or GEOGRAPHY types in most databases, including PostGIS types, try to follow OGC and SQL/MM standards and can contain any collection or mix of points/lines/polygons spatial types. Here a single SQL type (e.g. GEOMETRY) may contain arbitrary spatial type(s).
As for literals, the syntax varies. PostgreSQL supports casts using
'POINT(1 1)'::geometry
syntax, but in all databases you can use equivalent functions likeST_GeomFromText('POINT(1 1)')
(function names vary across DBMS) to build geometry or geography.