Po pierwsze, nie mix psql meta-polecenia i SQL polecenia. Są to oddzielne zestawy poleceń. Są sztuczki, aby je połączyć (używając meta-polecenia psql \o i \\ i przesyłanie ciągów do psql w powłoce), ale szybko się to myli.
- Spraw, aby Twoje pliki zawierały tylko polecenia SQL.
- Nie dołączaj
CREATE DATABASEinstrukcja w plikach SQL. Utwórz bazę danych osobno, masz wiele pliki, które chcesz wykonać w tej samej bazie danych szablonu.
Zakładając pracujesz jako użytkownik systemu operacyjnego postgres i użyj roli DB postgres jako (domyślnie) superużytkownik Postgres, wszystkie bazy danych znajdują się w tym samym klastrze DB na domyślnym porcie 5432 i roli postgres ma dostęp bez hasła dzięki IDENT ustawienie w pg_hba.conf - domyślna konfiguracja.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Oparłem nową bazę danych szablonów na domyślnej bazie danych szablonów systemu template0 . Podstawy w instrukcji tutaj.
Twoje pytania
Jak (...) uruchomić zestaw poleceń cmd pgsql z pliku
Wypróbuj:
psql mytemplate1 -f file
Przykładowy plik skryptu dla partii plików w katalogu:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Opcja polecenia -f sprawia, że psql wykonywać polecenia SQL w pliku.
Jak stworzyć bazę danych na podstawie istniejącego szablonu w linii poleceń
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
Opcja polecenia -c sprawia, że psql wykonać pojedynczy ciąg poleceń SQL. Może być wieloma poleceniami zakończonymi przez ; - zostanie wykonany za jednego transakcja i zwrócony tylko wynik ostatniego polecenia.
Przeczytaj o opcjach polecenia psql w instrukcji.
Jeśli nie podasz bazy danych do połączenia, psql połączy się z domyślną bazą danych konserwacji o nazwie „postgres”. W drugiej odpowiedzi nie ma znaczenia, z którą bazą danych się łączymy.