Kortom, je moet postgis opnieuw installeren, eventueel gewoon drop extension postgis;
en create extension postgis;
.
Langere uitleg
Misschien mis je alleen dit type, maar ik betwijfel of het alleen dat is, maar als je het wilt proberen, hier is vanaf 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.';
Wat betreft welke shells, je kunt er meer over lezen in documentatie .
Kortom :Sommige typen hebben functies nodig die op hun beurt vereisen dat het type met moet worden gedeclareerd, dus geen van beide kan worden gemaakt - normaal gesproken.
Om dat probleem op te lossen, maakt Postgres shell-types die zo goed als tijdelijke aanduidingen zijn, alleen maar om aan de validatie te voldoen.
In jouw geval geometry
is van het shell-type en is niet correct gedeclareerd, wat betekent dat postgis niet correct is geïnstalleerd.
Shell-type ziet er als volgt uit:
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;
En een functie die een shell-type vereist, kan zijn:
CREATE OR REPLACE FUNCTION geometry_in(cstring)
RETURNS geometry
AS '$libdir/postgis-2.3','LWGEOM_in'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;
Als je terugkijkt op de juiste geometry
definitie zult u merken dat deze functie er deel van uitmaakt, maar niet in deze shell.