Za prvé, ne mix psql
meta-příkazy a SQL
příkazy. Jedná se o samostatné sady příkazů. Existují triky, jak je zkombinovat (pomocí metapříkazů psql \o
a \\
a propojení řetězců do psql v shellu), ale to se rychle zamotá.
- Zajistěte, aby vaše soubory obsahovaly pouze příkazy SQL.
- Nezahrnujte
CREATE DATABASE
příkaz v souborech SQL. Vytvořte db samostatně, máte jich více soubory, které chcete spustit ve stejné šabloně db.
Za předpokladu pracujete jako uživatel operačního systému postgres
a použijte DB roli postgres
jako (výchozí) superuživatel Postgres jsou všechny databáze ve stejném klastru DB na výchozím portu 5432 a roli postgres
má přístup bez hesla díky IDENT
nastavení v pg_hba.conf
- výchozí nastavení.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Novou databázi šablon jsem založil na výchozí systémové databázi šablon template0
. Základy v návodu zde.
Vaše otázky
Jak (...) spustit sadu pgsql cmds ze souboru
Zkuste:
psql mytemplate1 -f file
Příklad souboru skriptu pro dávku souborů v adresáři:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Volba příkazu -f
vytváří psql
spouštět příkazy SQL v souboru.
Jak vytvořit databázi na základě existující šablony na příkazovém řádku
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
Volba příkazu -c
vytváří psql
spustit jeden řetězec příkazů SQL. Může být více příkazů ukončených ;
- bude proveden v jednom transakce a vrácen pouze výsledek posledního příkazu.
Přečtěte si o možnostech příkazu psql v příručce.
Pokud nezadáte databázi pro připojení, psql
se připojí k výchozí databázi údržby s názvem „postgres“. Ve druhé odpovědi je irelevantní, ke které databázi se připojujeme.