pg_dump是否有办法不将search_path用于模式

时间:2017-02-10 10:40:28

标签: postgresql postgis pg-dump pg-restore postgresql-9.6

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

我的一般情况是我正在尝试转储和恢复包含许多模式的postgis数据库(这是将我的数据库迁移到Amazon RDS)。在每个模式中,我都有具有地理列的表。从转储生成的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   表主映射pg_restore:[archiver(db)]无法执行   查询:错误:关系“spatial_ref_sys”不存在第3行:
  geometry public.geography(Geometry,4283),                        ^ QUERY:SELECT proj4text FROM spatial_ref_sys WHERE srid = 4283 LIMIT 1       命令是:CREATE TABLE main(       pk bigint NOT NULL,       geometry public.geography(Geometry,4283),       批量bigint NOT NULL,       JSO ...

然后事情就变成梨形了。

到目前为止我所推断的是因为搜索路径中没有包含“公共”模式,所以操作无法找到“spatial_ref_sys”表。 奇怪的是,如果EPSG代码是4326,这样可以正常工作。

那么......我该怎么办呢?有没有办法告诉pg_dump不要使用search_path?

我从转发的服务器:

在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.0,2012年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“的拓扑结构需要升级)RASTER(光栅触发来自” 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.2,2015年9月8日”GDAL =“GDAL 2.1.1,2016/07年度发布/ 07“LIBXML =”2.9.1“LIBJSON =”0.12“TOPOLOGY RASTER

0 个答案:

没有答案