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 DATABASE
instrukcja 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.