Проблема в том, что вы используете неправильный тип данных (bytea
) для своих геометрических данных.
PostgreSQL может неявно преобразовывать между bytea
и geometry
/ geography
:
\dC bytea
List of casts
Source type | Target type | Function | Implicit?
-----------------+-------------+--------------------+-----------
bytea | geography | geography | yes
bytea | geometry | geometry | yes
geography | bytea | bytea | yes
geometry | bytea | bytea | yes
[...]
(7 rows)
Теперь есть три функции st_intersects
:
\df st_intersects
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+---------------+------------------+----------------------------------+------
public | st_intersects | boolean | geog1 geography, geog2 geography | func
public | st_intersects | boolean | geom1 geometry, geom2 geometry | func
public | st_intersects | boolean | text, text | func
(3 rows)
Теперь, следуя своим правилам разрешения типов функций , PostgreSQL не имеет возможности определить, хотите ли вы первая или вторая из этих функций, которая вызывает сообщение об ошибке.
Решения:
Используйте соответствующий тип данных (geometry
или geography
) в определениях таблиц.
Используйте явное приведение, как в сообщении об ошибке:
st_intersects(CAST (g1 AS geometry), CAST (g2 AS geometry))
I думаю, что PostGIS сделал неявное приведение обоих типов неявным выбором.