Trước hết, không trộn psql
lệnh meta và SQL
các lệnh. Đây là những bộ lệnh riêng biệt. Có những thủ thuật để kết hợp chúng (sử dụng các lệnh meta psql \o
và \\
và chuyển các chuỗi sang psql trong shell), nhưng điều đó nhanh chóng gây nhầm lẫn.
- Làm cho các tệp của bạn chỉ chứa các lệnh SQL.
- Không bao gồm
CREATE DATABASE
câu lệnh trong tệp SQL. Tạo db riêng biệt, bạn có nhiều các tệp bạn muốn thực thi trong cùng một db mẫu.
Giả định bạn đang hoạt động với tư cách người dùng hệ điều hành postgres
và sử dụng vai trò DB postgres
là (mặc định) Postgres superuser, tất cả cơ sở dữ liệu nằm trong cùng một cụm DB trên cổng mặc định 5432 và vai trò postgres
có quyền truy cập không cần mật khẩu do IDENT
cài đặt trong pg_hba.conf
- một thiết lập mặc định.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Tôi dựa trên cơ sở dữ liệu mẫu mới trên cơ sở dữ liệu mẫu hệ thống mặc định template0
. Thông tin cơ bản trong sách hướng dẫn tại đây.
Câu hỏi của bạn
Cách (...) chạy một tập hợp các cmds pgsql từ tệp
Hãy thử:
psql mytemplate1 -f file
Tệp tập lệnh mẫu cho hàng loạt tệp trong một thư mục:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Tùy chọn lệnh -f
làm cho psql
thực hiện các lệnh SQL trong một tệp.
Cách tạo cơ sở dữ liệu dựa trên mẫu hiện có tại dòng lệnh
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
Tùy chọn lệnh -c
làm cho psql
thực hiện một chuỗi lệnh SQL duy nhất. Có thể là nhiều lệnh, được kết thúc bởi ;
- sẽ được thực hiện trong một giao dịch và chỉ kết quả của lệnh cuối cùng được trả về.
Đọc về các tùy chọn lệnh psql trong sách hướng dẫn.
Nếu bạn không cung cấp cơ sở dữ liệu để kết nối, psql
sẽ kết nối với cơ sở dữ liệu bảo trì mặc định có tên "postgres". Trong câu trả lời thứ hai, không liên quan đến việc chúng tôi kết nối với cơ sở dữ liệu nào.