Първо, не смесете psql
мета-команди и SQL
команди. Това са отделни набори от команди. Има трикове за комбиниране на тези (с помощта на метакомандите на psql \o
и \\
и изпращане на низове към psql в обвивката), но това бързо става объркващо.
- Направете вашите файлове да съдържат само SQL команди.
- Не включвайте
CREATE DATABASE
изявление в SQL файловете. Създайте db отделно, имате множество файлове, които искате да изпълните в същия шаблон db.
Да предположим работите като потребител на ОС postgres
и използвайте ролята на DB postgres
като (по подразбиране) суперпотребител на Postgres, всички бази данни са в един и същ DB клъстер на порта по подразбиране 5432 и ролята postgres
има достъп без парола поради IDENT
настройка в pg_hba.conf
- настройка по подразбиране.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Базирах новата база данни с шаблони на базата данни за шаблони по подразбиране template0
. Основни положения в ръководството тук.
Вашите въпроси
Как да (...) стартирате набор от pgsql cmds от файл
Опитайте:
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 my_db TEMPLATE mytemplate1'
Командната опция -c
прави psql
изпълнете единичен SQL команден низ. Могат да бъдат множество команди, прекратени с ;
- ще се изпълни в един транзакция и се връща само резултатът от последната команда.
Прочетете за опциите на командата psql в ръководството.
Ако не предоставите база данни за свързване, psql
ще се свърже с базата данни за поддръжка по подразбиране, наречена "postgres". Във втория отговор е без значение към коя база данни се свързваме.