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 DATABASEpří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.