sql >> Databáze >  >> RDS >> PostgreSQL

Shell skript pro provádění příkazů pgsql v souborech

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.



  1. Operace není platná pro stav chyby transakce a rozsah transakce

  2. Mysql - odstranění z více tabulek jedním dotazem

  3. Jak opravit „Přidružená funkce oddílu generuje více oddílů, než kolik je skupin souborů uvedených ve schématu“ Msg 7707 v SQL Server

  4. Přidání objektu dict do postgresql