【问题标题】:Install postgis extensions via script通过脚本安装 postgis 扩展
【发布时间】:2018-11-01 02:04:26
【问题描述】:

我正在尝试将 GIS 扩展自动安装到 Postgres (AWS RDS) 中。下面的脚本是使用 AWS doco here 创建的。等待用户输入某个命令时卡住了。

script.sql

select current_user;

create extension postgis;
create extension fuzzystrmatch;
create extension postgis_tiger_geocoder;
create extension postgis_topology;
\dn

alter schema tiger owner to rds_superuser;
alter schema tiger_data owner to rds_superuser;
alter schema topology owner to rds_superuser;
\dn

CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$;

SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO rds_superuser;')
  FROM (
    SELECT nspname, relname
    FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid)
    WHERE nspname in ('tiger','topology') AND
    relkind IN ('r','S','v') ORDER BY relkind = 'S')
s;

SET search_path=public,tiger;

select na.address, na.streetname, na.streettypeabbrev, na.zip
from normalize_address('1 Devonshire Place, Boston, MA 02109') as na;

select topology.createtopology('my_new_topo',26986,0.5);

这些命令在手动运行时都可以正常工作,但是有一个命令需要用户输入,我不知道如何自动化它。

导致问题的命令是:

SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO rds_superuser;')
  FROM (
    SELECT nspname, relname
    FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid)
    WHERE nspname in ('tiger','topology') AND
    relkind IN ('r','S','v') ORDER BY relkind = 'S')
s;

执行时,我不会像其他命令一样返回psql shell。我得到如下输出:

                                exec
--------------------------------------------------------------------
 ALTER TABLE tiger.loader_platform OWNER TO rds_superuser;
 ALTER TABLE tiger.pagc_rules OWNER TO rds_superuser;
 ALTER TABLE tiger.zip_lookup_base OWNER TO rds_superuser;
 ALTER TABLE topology.topology OWNER TO rds_superuser;
 ...
 ALTER TABLE tiger.pagc_lex OWNER TO rds_superuser;
 ALTER TABLE tiger.zip_lookup_all OWNER TO rds_superuser;
 ALTER TABLE tiger.featnames_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.bg_gid_seq OWNER TO rds_superuser;
:

它需要我按q,然后它退出并且脚本继续。

我正在运行的命令是: psql -h myrdsinstance.rds.amazonaws.com -U myusername -d mydbname -a -f script.sql

【问题讨论】:

    标签: postgresql amazon-web-services postgis amazon-rds psql


    【解决方案1】:

    看起来寻呼机正在启动。尝试在psql 中禁用它

    \pset pager off
    

    要在不支持寻呼机的情况下启动 psql,请取消设置 PAGER 环境变量,如下所示:

    PAGER= psql
    

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 2021-04-24
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      相关资源
      最近更新 更多