Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql pg_dump有没有办法不使用模式的搜索路径_Postgresql_Postgis_Pg Dump_Pg Restore_Postgresql 9.6 - Fatal编程技术网

Postgresql pg_dump有没有办法不使用模式的搜索路径

Postgresql pg_dump有没有办法不使用模式的搜索路径,postgresql,postgis,pg-dump,pg-restore,postgresql-9.6,Postgresql,Postgis,Pg Dump,Pg Restore,Postgresql 9.6,问题: pg_dump命令有没有办法不使用search_path设置模式,而是用表名定义模式 我的一般情况是,我正在尝试转储和恢复一个包含许多模式的postgis数据库(这是将我的数据库迁移到AmazonRDS中)。在每个模式中,我都有一个带有地理列的表。从转储生成的SQL类似于: CREATE SCHEMA aaaa; SET search_path = aaaa, pg_catalog; SET default_tablespace = ''; SET default_with_oids

问题: pg_dump命令有没有办法不使用search_path设置模式,而是用表名定义模式

我的一般情况是,我正在尝试转储和恢复一个包含许多模式的postgis数据库(这是将我的数据库迁移到AmazonRDS中)。在每个模式中,我都有一个带有地理列的表。从转储生成的SQL类似于:

CREATE SCHEMA aaaa; 
SET search_path = aaaa, pg_catalog;

SET default_tablespace = '';
SET default_with_oids = false;
--
-- TOC entry 346 (class 1259 OID 1135099)
-- Name: main; Type: TABLE; Schema: aaaa; Owner: -
--
CREATE TABLE main (
    pk bigint NOT NULL,
    geometry public.geography(Geometry,4283),
    batch bigint NOT NULL,
    json jsonb NOT NULL,
    cache jsonb NOT NULL,
    active bigint DEFAULT date_part('epoch'::text, now()) NOT NULL,
    inactive bigint DEFAULT '8640000000000000'::bigint NOT NULL );
但是,在还原时,出现以下错误:

pg_restore:[archiver(db)]来自TOC条目346的错误;1259 1135099 表main mapworks pg_restore:[archiver(db)]无法执行 查询:错误:关系“空间参考系统”不存在第3行:
几何学公共地理(几何学,4283), ^查询:从空间参考系统中选择proj4text,其中srid=4283限制1 命令was:createtablemain( pk bigint不为空, 几何学公共地理(几何学,4283), 批处理bigint不为空, jso

然后事情就从那里变成了梨形

到目前为止,我推断的是,由于“public”模式未包含在搜索路径中,因此操作无法找到“spatial\u ref\u sys”表。 奇怪的是,如果EPSG代码是4326,这就可以正常工作

那么…我该怎么办?有没有办法告诉pg_dump不要使用搜索路径

我要从中转储的服务器

x86_64-pc-linux-gnu上的PostgreSQL 9.6.1,由gcc(Debian 4.9.2-10)4.9.2编译,64位

POSTGIS=“2.3.1 r15264”GEOS=“3.4.2-CAPI-1.8.2 r3921”PROJ=“Rel.4.8.012年3月6日”GDAL=“GDAL 1.10.1,2013/08/26发布”LIBXML=“2.9.1”LIBJSON=“0.11.99”(来自“2.3.0 r15146”的核心程序需要升级)拓扑(来自“2.3.0 r15146”的拓扑程序需要升级)光栅(来自“2.3.0 r15146”的光栅程序需要升级)

我要还原到的服务器

x86_64-pc-linux-gnu上的PostgreSQL 9.6.1,由gcc(gcc)4.8.2 20140120(Red Hat 4.8.2-16)编译,64位


POSTGIS=“2.3.0 r15146”GEOS=“3.5.0-CAPI-1.9.0 r4084”PROJ=“Rel.4.9.22015年9月8日”GDAL=“GDAL 2.1.1,2016/07/07发布”LIBXML=“2.9.1”LIBJSON=“0.12”拓扑光栅

作为一种解决方法,您可以尝试通过sed过滤pg_restore的输出:
sed的/^SET search_path=aaaa,pg_catalog;/SET search_path=aaaa,public,pg_catalog;/g'
是的,我曾想过。但我希望有一种更“正确”的方法来完成它。这对我不起作用(v10)。进程几乎立即退出,就像它已损坏一样。