Em primeiro lugar, não misturar
psql
meta-comandos e SQL
comandos. Estes são conjuntos separados de comandos. Existem truques para combiná-los (usando os meta-comandos do psql \o
e \\
e canalizando strings para o psql no shell), mas isso fica confuso rapidamente. - Faça com que seus arquivos contenham apenas comandos SQL.
- Não inclua o
CREATE DATABASE
instrução nos arquivos SQL. Crie o banco de dados separadamente, você tem múltiplos arquivos que você deseja executar no mesmo modelo de banco de dados.
Supondo você está operando como usuário do SO
postgres
e use a função de banco de dados postgres
como superusuário Postgres (padrão), todos os bancos de dados estão no mesmo cluster de banco de dados na porta padrão 5432 e na função postgres
tem acesso sem senha devido a um IDENT
configuração em pg_hba.conf
- uma configuração padrão. psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Eu baseei o novo banco de dados de modelo no banco de dados de modelo de sistema padrão
template0
. Noções básicas no manual aqui. Suas perguntas
Como (...) executar um conjunto de cmds pgsql do arquivo
Experimentar:
psql mytemplate1 -f file
Exemplo de arquivo de script para lote de arquivos em um diretório:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
A opção de comando
-f
faz psql
executar comandos SQL em um arquivo.
Como criar um banco de dados com base em um modelo existente na linha de comando
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
A opção de comando
-c
faz psql
executar uma única cadeia de comando SQL. Podem ser vários comandos, terminados por ;
- será executado em um transação e somente o resultado do último comando retornado.Leia sobre as opções de comando psql no manual.
Se você não fornecer um banco de dados para se conectar,
psql
irá se conectar ao banco de dados de manutenção padrão chamado "postgres". Na segunda resposta, é irrelevante a qual banco de dados nos conectamos.