Dan*_*Tan 5 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 );
Run Code Online (Sandbox Code Playgroud)
但是,在恢复时,我收到以下错误:
pg_restore: [archiver (db)] TOC 条目 346 中的错误;1259 1135099 TABLE main mapworks pg_restore:[archiver (db)] 无法执行查询:错误:关系“spatial_ref_sys”不存在第 3 行:
geometry public.geography(Geometry,4283),^ 查询:SELECT proj4text FROM spatial_ref_sys = WHERE srid 4283 LIMIT 1 命令是:CREATE TABLE main (pk bigint NOT NULL,geometry public.geography(Geometry,4283),batch 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" 拓扑栅格
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |