2015-03-22 6 views
0

Так что я хочу сделать здесь, чтобы запустить сценарий при подключении к базе данных я уже с помощью pgadmin3. Сценарий содержит роль создания, табличное пространство, базу данных и схему создания и несколько таблиц в этой схеме.PostgreSQL создать схему под другой базой данных с помощью сценария

Проблема здесь заключается в том, что когда я запускаю скрипт создает новую роль, табличного и базы данных правильно. Он также правильно создает схему и таблицы, но с проблемой, схема создается в базе данных, из которой я запускал скрипт вместо недавно созданной базы данных. Сценарий более или менее подобен этому.

CREATE ROLE "new_role" ... ; 

CREATE TABLESPACE "new_space" 
    OWNER "new_role" 
    LOCATION '/home/...'; 


CREATE DATABASE "new_db" 
    WITH OWNER = "new_role" 
      TABLESPACE = "new_space"; 

CREATE SCHEMA "schema" AUTHORIZATION "new_role" ; 

CREATE TABLE IF NOT EXISTS "schema"."new_table"( 

... 
) TABLESPACE "new_space";... 

... 

Я уже видел решение с \connect foo;, но это не то, что я хотел, я хотел, чтобы это каким-то образом соединить в сценарии, не запуская вещи отдельно и работает \connect foo в терминале.

Может кто-нибудь сказать мне, если есть в любом случае сделать это и помочь мне выйти с решением этой проблемы?

ответ

0

Использование psql и разделить его на два скрипта. Вы можете сохранить скрипты в .sql файлы, а затем запустить Psql для подключения к БД вы хотите запустить каждый сценарий против всех на одной и той же командной строке (с && между каждой команды). В команды два PSQL могут быть объединены в один Баш сценарий так, что только одна команда, что вам нужно запустить.

Что-то вроде этого, если сценарий был назван foo.sql:

psql -X -h <host> -U <user> -p <port> -f foo.sql <db_name>

Первый сценарий может иметь команды в create role, create tablespace и create database, подключение к postgres дб или шаблон DB, и второй скрипт может содержать остальные команды.

Вы также можете использовать createdb от bash сценарий вместо CREATE DATABASE.

Смежные вопросы