所以我有一个由pg_dump创建的159G的postgres转储文件,我想将其还原到数据库中。它运行良好,直到引发以下错误:
$ psql -a -U postgres -d mydb < /opt/postgres_restore_files/db_mydb_2020-06-11_18-00.dmp
.....
CREATE INDEX
CREATE INDEX
CREATE INDEX
ERROR: type "geometry" does not exist
LINE 1: SELECT geog::geometry
^
QUERY: SELECT geog::geometry
CONTEXT: PL/pgSQL function public._togeom(public.geography) line 3 at RETURN
STATEMENT: CREATE INDEX my_index ON mydb.geo_zone USING gist (public._togeom(geom));
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
Below are the definitions:
CREATE FUNCTION public._togeom(geog public.geography) RETURNS public.geometry
LANGUAGE plpgsql IMMUTABLE
AS $$
BEGIN
RETURN geog::geometry;
END;
$$;
ALTER FUNCTION public._togeom(geog public.geography) OWNER TO postgres;
CREATE TABLE mydb.geo_zone (
...
geom public.geography,
...
);
ALTER TABLE mydb.geo_zone OWNER TO my_user;
....
CREATE INDEX my_index ON mydb.geo_zone USING gist (public._togeom(geom));
创建扩展名postgis后,我可以看到类型几何存在于公共架构中,不知道为什么在还原过程中会引发该错误。另外,我之后尝试再次手动运行CREATE INDEX命令,它可以正常运行而没有任何错误,并且可以看到创建的索引“ my_index”。但是我当然不希望手动修复此问题,只需尝试了解导致问题的原因。
非常感谢您的任何想法! 谢谢。