Reputation: 245
My environment: PostgreSQL 11.4 with PostGIS 2.5.2
CREATE TABLE m_polygon (id SERIAL PRIMARY KEY, bounds POLYGON);
INSERT INTO m_polygon(bounds) VALUES(
'(0.0, 0.0), (0.0, 10.0), (10.0, 0.0), (10.0, 10.0), (0,0)'
);
SELECT ST_WITHIN(m_polygon.bounds , m_polygon.bounds ) FROM m_polygon;
I am getting the error message for SELECT statement above:
ERROR: function st_within(polygon, polygon) does not exist
HINT: No function matches the given name and argument types. You might
need to add explicit type casts
I was thinking what the reason for the error is: the ST_WITHIN arguments types should be GEOMETRY, but I am passing the POLYGONs.
However the following works:
SELECT ST_WITHIN(ST_MakePoint(1,1), ST_MakePoint(1,1) ) ;
Upvotes: 0
Views: 1707
Reputation: 17906
POLYGON
is Postgres native type. Geometry
is the type used in PostGIS. ST_...
functions are Postgis functions.
Note that you can restrict a PostGIS geometry to a specific subtype (geometry(POLYGON)
)
If you don't want PostGIS, you would need to use native geometry operators.
If you are to use spatial data, and since you already have PostGIS, it is much better to switch to true geometries:
CREATE TABLE m_polygon (id SERIAL PRIMARY KEY, bounds geometry(POLYGON));
INSERT INTO m_polygon(bounds) VALUES(
st_geomFromText('POLYGON((0.0 0.0, 0.0 10.0, 10.0 10.0, 10.0 0.0, 0.0 0.0))')
);
SELECT ST_WITHIN(m_polygon.bounds , m_polygon.bounds ) FROM m_polygon;
Upvotes: 3