PostGIS 3: для st_equals не найден пространственный оператор: opfamily 36658 type 36545 - PullRequest
1 голос
/ 14 июля 2020

После обновления до Postgres 12 и PostGIS 3 с 11 и 2.5 соответственно, теперь я получаю эту ошибку при использовании ST_Equals в столбце геометрии с индексом GiST. Была функция с аналогичным сообщением об ошибке, вызванная индексом GiST для ST_Covers , который оказался ошибкой .

Я пытаюсь перепрыгнуть через (многие) обручи чтобы отправить отчет об ошибке в PostGIS, но я подумал, что сначала поищу обратную связь по этому поводу, если это не ошибка или кто-то знает иное?

Код воспроизведения, если postgis установлен на public схема:

CREATE TABLE "public"."geopoints" (
  "id" int4 NOT NULL,
  "geopoint" "public"."geometry",
  CONSTRAINT "geopoints_pkey" PRIMARY KEY ("id")
)
;

CREATE INDEX "index" ON "public"."geopoints" USING gist (
  "geopoint"
);

SELECT COUNT(*) FROM "public".geopoints g1, geopoints g2 WHERE "public".ST_Equals(g1.geopoint, g2.geopoint)

Сообщается об ошибке no spatial operator found for 'st_equals': opfamily 36658 type 36545. Удаление индекса, запрос выполняется нормально

Версия PostGIS: POSTGIS="3.0.1 3.0.1" [EXTENSION] PGSQL="120" GEOS="3.8.0-CAPI-1.13.1 " PROJ="Rel. 5.2.0, September 15th, 2018" LIBXML="2.9.9" LIBJSON="0.12" LIBPROTOBUF="1.2.1" WAGYU="0.4.3 (Internal)"

Postgres версия: PostgreSQL 12.1, compiled by Visual C++ build 1914, 64-bit

Редактировать, добавлены ответы для комментария:

SELECT a.amopstrategy, a.amoppurpose, o.oprname, f.opfname
FROM pg_amop AS a
   JOIN pg_opfamily AS f ON a.amopfamily = f.oid
   JOIN pg_operator AS o ON a.amopopr = o.oid
WHERE f.oid = 36658;

1   s   <<  gist_geometry_ops_2d
2   s   &<  gist_geometry_ops_2d
3   s   &&  gist_geometry_ops_2d
4   s   &>  gist_geometry_ops_2d
5   s   >>  gist_geometry_ops_2d
6   s   ~=  gist_geometry_ops_2d
7   s   ~   gist_geometry_ops_2d
8   s   @   gist_geometry_ops_2d
9   s   &<| gist_geometry_ops_2d
10  s   <<| gist_geometry_ops_2d
11  s   |>> gist_geometry_ops_2d
12  s   |&> gist_geometry_ops_2d
13  o   <-> gist_geometry_ops_2d
14  o   <#> gist_geometry_ops_2d

и

SELECT typname, typnamespace::regnamespace,
       typinput::regproc, typoutput::regproc
FROM pg_type WHERE oid = 36545;

geometry    core_system core_system.geometry_in core_system.geometry_out

Редактировать 2:

SELECT a.oid AS amop_oid, a.amopstrategy, a.amoppurpose, o.oid AS opr_oid, o.oprname FROM pg_amop AS a JOIN pg_operator AS o ON a.amopopr = o.oid WHERE a.amopfamily = 36658 AND a.amoplefttype = 36545 AND a.amoprighttype = 36545;

36660   1   s   36644   <<
36661   2   s   36646   &<
36662   3   s   36631   &&
36663   4   s   36653   &>
36664   5   s   36643   >>
36665   6   s   36633   ~=
36666   7   s   36640   ~
36667   8   s   36641   @
36668   9   s   36651   &<|
36669   10  s   36649   <<|
36670   11  s   36648   |>>
36671   12  s   36656   |&>
36672   13  o   36636   <->
36673   14  o   36637   <#>
...