En bref, vous devez réinstaller postgis, éventuellement simplement drop extension postgis;
et create extension postgis;
.
Explication plus longue
Il se peut que vous manquiez juste ce type, mais je doute que ce soit juste ça, mais si vous voulez essayer, voici à partir de 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.';
Quant aux shells, vous pouvez en savoir plus à leur sujet dans la documentation .
En bref :Certains types nécessitent des fonctions qui, à leur tour, nécessitent que le type avec soit déclaré, donc aucun ne peut être créé - normalement.
Afin de contourner ce problème, Postgres créera des types de shell qui sont à peu près des espaces réservés juste pour satisfaire la validation.
Dans votre cas geometry
est de type shell et n'a pas été correctement déclaré, ce qui signifie que postgis n'a pas été installé correctement.
Le type de coque ressemble à ceci :
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;
Et la fonction nécessitant un type de shell pourrait être :
CREATE OR REPLACE FUNCTION geometry_in(cstring)
RETURNS geometry
AS '$libdir/postgis-2.3','LWGEOM_in'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;
Si vous regardez en arrière la bonne geometry
définition, vous remarquerez que cette fonction en fait partie, mais pas dans ce shell.