Установить расширения postgis через скрипт - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь автоматизировать установку расширений ГИС в 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 Оболочка, как с другими командами.Я получаю вывод, как показано ниже:

                                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

1 Ответ

0 голосов
/ 22 мая 2018

Похоже, пейджер начинает работать. Попробуйте отключить его в psql с помощью

\pset pager off

Чтобы запустить psql без поддержки пейджера, сбросьте переменную окружения PAGER следующим образом:

PAGER= psql
...