Pertama, jangan jangan campur psql
meta-perintah dan SQL
perintah. Ini adalah kumpulan perintah yang terpisah. Ada trik untuk menggabungkannya (menggunakan perintah meta psql \o
dan \\
dan melakukan pemipaan string ke psql di shell), tetapi itu akan cepat membingungkan.
- Buat file Anda hanya berisi perintah SQL.
- Jangan sertakan
CREATE DATABASE
pernyataan dalam file SQL. Buat db secara terpisah, Anda memiliki banyak file yang ingin Anda jalankan dalam template db yang sama.
Dengan asumsi Anda beroperasi sebagai pengguna OS postgres
dan gunakan peran DB postgres
sebagai (default) superuser Postgres, semua database berada di cluster DB yang sama pada port default 5432 dan peran postgres
memiliki akses tanpa kata sandi karena IDENT
pengaturan di pg_hba.conf
- pengaturan default.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Saya mendasarkan database template baru pada database template sistem default template0
. Dasar-dasar dalam manual di sini.
Pertanyaan Anda
Cara (...) menjalankan satu set cmd pgsql dari file
Coba:
psql mytemplate1 -f file
Contoh file skrip untuk kumpulan file dalam direktori:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Opsi perintah -f
membuat psql
mengeksekusi perintah SQL dalam sebuah file.
Cara membuat database berdasarkan template yang ada di command line
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
Opsi perintah -c
membuat psql
mengeksekusi string perintah SQL tunggal. Bisa beberapa perintah, diakhiri dengan ;
- akan dieksekusi dalam satu transaksi dan hanya hasil dari perintah terakhir yang dikembalikan.
Baca tentang opsi perintah psql di manual.
Jika Anda tidak menyediakan database untuk terhubung, psql
akan terhubung ke database pemeliharaan default bernama "postgres". Pada jawaban kedua, tidak relevan database mana yang kita sambungkan.