Aqui está um esqueleto que pode ser usado diretamente em um script bash:
#!/bin/sh
psql -U postgres << END_OF_SCRIPT
DROP DATABASE sis_db; -- drop the DB
CREATE DATABASE sis_db WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;
\c sis_db
-- Create some schemas on the DB
CREATE SCHEMA nomencladores AUTHORIZATION postgres;
CREATE SCHEMA negocio AUTHORIZATION postgres;
CREATE SCHEMA usuarios_externos AUTHORIZATION postgres;
END_OF_SCRIPT
Alguns comentários:
-
-u
não funcionaria, são-U
, as opções diferenciam maiúsculas e minúsculas. -
CREATE DATABASE
não se conecta automaticamente ao novo banco de dados,\c sis_db
faz e é a única maneira de os objetos criados posteriormente no script pertencerem a esse banco de dados. -
comentários de fim de linha começam com
--
no SQL, não//
-
A opção
--file
não pode ser usada várias vezes na linha de comando, apenas a última será honrada. No entanto,\i fileN.sql
de dentro depsql
pode ser usado para incluir uma série de arquivos. -
tenha cuidado com os erros. Por padrão, um script continuará após um erro, possivelmente causando efeitos indesejáveis, como a criação de objetos no banco de dados incorreto. Isso pode ser evitado com
-vON_ERROR_STOP=1
na linha de comando do psql ou\set ON_ERROR_STOP on
dentro do script. -
Verifique a página de manual do psql, isso explica tudo isso e muito mais.