Ответ 1
Прежде всего, сделайте не сочетание psql
мета-команд и команд SQL
. Это отдельные команды. Есть хитрости, чтобы объединить их (используя метакоманды psql \o
и \\
и строки строк в psql в оболочке), но избегайте этого, если сможете.
- Сделайте ваши файлы содержащими только команды SQL.
- Не включайте инструкцию CREATE DATABASE в файлы SQL. Создайте db отдельно, у вас есть несколько файлов, которые вы хотите выполнить в одном и том же шаблоне db.
Я предполагаю, что вы работаете как системный пользователь postgres
, и у вас есть postgres
как суперпользователь Postgres. Все базы данных в одном кластере db на порту по умолчанию 5432 и пользователь postgres
имеют доступ без пароля из-за параметра IDENT
в pg_hba.conf
(настройки по умолчанию).
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Я основываю новый шаблон db на системном шаблоне db template0
. Подробнее читайте здесь.
Ваш вопрос:
Как (...) запустить набор из pgsql cmds из файла
Try:
psql mytemplate1 -f file
Пример для партии:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Командная опция -f
делает psql
выполнение SQL-команд в файле.
Как создать базу данных на основе существующего шаблона в командной строке
psql -c 'CREATE DATABASE myDB TEMPLATE mytemplate1'
Командная опция -c
делает psql
выполнение одной командной строки SQL. Может быть несколько команд, завершенных ;
- будет выполняться в одной транзакции и будет возвращен только результат последней команды.
Ознакомьтесь с параметрами команды psql в руководстве.
Если вы не предоставляете базу данных для подключения, psql
будет использовать базу данных обслуживания по умолчанию с именем postgres
. Во втором ответе не имеет значения, к какой базе данных мы подключаемся.