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:
-
-unão funcionaria, são-U, as opções diferenciam maiúsculas e minúsculas. -
CREATE DATABASEnão se conecta automaticamente ao novo banco de dados,\c sis_dbfaz 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
--filenão pode ser usada várias vezes na linha de comando, apenas a última será honrada. No entanto,\i fileN.sqlde dentro depsqlpode 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=1na linha de comando do psql ou\set ON_ERROR_STOP ondentro do script. -
Verifique a página de manual do psql, isso explica tudo isso e muito mais.