Singkatnya, Anda perlu menginstal ulang postgis, mungkin cukup drop extension postgis;
dan create extension postgis;
.
Penjelasan lebih panjang
Anda mungkin melewatkan jenis ini saja, tetapi saya ragu hanya itu, jika Anda ingin mencoba, ini dari 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.';
Untuk shell apa, Anda dapat membaca lebih lanjut tentang mereka di dokumentasi .
Singkatnya :Beberapa tipe memerlukan fungsi yang pada gilirannya mengharuskan tipe with tersebut dideklarasikan, jadi keduanya tidak dapat dibuat - biasanya.
Untuk mengatasi masalah itu, Postgres akan membuat tipe shell yang cukup banyak sebagai pengganti hanya untuk memenuhi validasi.
Dalam kasus Anda geometry
adalah tipe shell dan tidak dideklarasikan dengan benar, artinya postgis tidak diinstal dengan benar.
Jenis cangkang terlihat seperti ini:
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;
Dan fungsi yang membutuhkan tipe shell dapat berupa:
CREATE OR REPLACE FUNCTION geometry_in(cstring)
RETURNS geometry
AS '$libdir/postgis-2.3','LWGEOM_in'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;
Jika Anda melihat kembali geometry
yang tepat definisi Anda akan melihat bahwa fungsi ini adalah bagian darinya, tetapi tidak dalam shell ini.