функция st_intersects (bytea, bytea) не уникальна - PullRequest
0 голосов
/ 27 мая 2020

При попытке объединить две таблицы и экспортировать результат в файл csv я получаю эту ошибку, т.е. function st_intersects(bytea, bytea) is not unique.

The whole screen after running the command and it also shows the tables that I am trying to combine.

1 Ответ

3 голосов
/ 27 мая 2020

Проблема в том, что вы используете неправильный тип данных (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 не имеет возможности определить, хотите ли вы первая или вторая из этих функций, которая вызывает сообщение об ошибке.

Решения:

  1. Используйте соответствующий тип данных (geometry или geography) в определениях таблиц.

  2. Используйте явное приведение, как в сообщении об ошибке:

    st_intersects(CAST (g1 AS geometry), CAST (g2 AS geometry))
    

I думаю, что PostGIS сделал неявное приведение обоих типов неявным выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...