Stručně řečeno, musíte přeinstalovat postgis, možná jen drop extension postgis;
a create extension postgis;
.
Delší vysvětlení
Možná by vám mohl chybět právě tento typ, ale pochybuji, že je to jen tím, ale pokud to chcete zkusit, tady je z 2.3:
CREATE TYPE public.geometry
(INPUT=geometry_in,
OUTPUT=geometry_out,
RECEIVE=geometry_recv,
SEND=geometry_send,
TYPMOD_IN=geometry_typmod_in,
TYPMOD_OUT=geometry_typmod_out,
ANALYZE=geometry_analyze,
CATEGORY='U', DEFAULT='',
INTERNALLENGTH=-1, ALIGNMENT=double, STORAGE=MAIN);
ALTER TYPE public.geometry
OWNER TO postgres;
COMMENT ON TYPE public.geometry
IS 'postgis type: Planar spatial data type.';
Pokud jde o shelly, můžete si o nich přečíst více v dokumentaci .
Ve zkratce :Některé typy vyžadují funkce, které zase vyžadují, aby byl deklarován typ s, takže nelze vytvořit ani jeden - normálně.
Aby se tento problém vyřešil, Postgres vytvoří typy shellu, které jsou do značné míry zástupným symbolem, aby uspokojily validaci.
Ve vašem případě geometry
je typu shell a nebyl správně deklarován, což znamená, že postgis nebyl správně nainstalován.
Typ shellu vypadá takto:
CREATE TYPE public.geometry
(INPUT=shell_in,
OUTPUT=shell_out,
RECEIVE=-,
SEND=-,
ANALYZE=-,
CATEGORY='P',
PASSEDBYVALUE, DEFAULT='',
INTERNALLENGTH=4, ALIGNMENT=int4, STORAGE=PLAIN);
ALTER TYPE public.geometry
OWNER TO postgres;
A funkce vyžadující typ shellu může být:
CREATE OR REPLACE FUNCTION geometry_in(cstring)
RETURNS geometry
AS '$libdir/postgis-2.3','LWGEOM_in'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;
Pokud se podíváte zpět na správnou geometry
definice si všimnete, že tato funkce je její součástí, ale ne v tomto shellu.