まず、しない psqlをミックスする メタコマンドとSQL コマンド。これらは個別のコマンドセットです。それらを組み合わせるためのトリックがあります(psqlメタコマンド\oを使用) および\\ シェル内のpsqlに文字列をパイプします)が、すぐに混乱します。
- ファイルにSQLコマンドのみを含めるようにします。
-
CREATE DATABASEを含めないでください SQLファイルのステートメント。データベースを個別に作成します。複数 同じテンプレートデータベースで実行するファイル。
想定 OSユーザーpostgresとして操作しています DBロールpostgresを使用します (デフォルトの)Postgresスーパーユーザーとして、すべてのデータベースはデフォルトのポート5432とロールpostgresの同じDBクラスターにあります IDENTにより、パスワードなしでアクセスできます pg_hba.confでの設定 -デフォルトの設定。
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
新しいテンプレートデータベースは、デフォルトのシステムテンプレートデータベースtemplate0に基づいています。 。マニュアルの基本はこちら。
あなたの質問
(...)ファイルから一連のpgsqlコマンドを実行する方法
試してみてください:
psql mytemplate1 -f file
ディレクトリ内のファイルのバッチのスクリプトファイルの例:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
コマンドオプション-f psqlを作成します ファイル内のSQLコマンドを実行します。
コマンドラインで既存のテンプレートに基づいてデータベースを作成する方法
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
コマンドオプション-c psqlを作成します 単一のSQLコマンド文字列を実行します。 ;で終了する複数のコマンドにすることができます - oneで実行されます トランザクションと最後のコマンドの結果のみが返されます。
マニュアルのpsqlコマンドオプションについてお読みください。
接続するデータベースを提供しない場合は、psql 「postgres」という名前のデフォルトのメンテナンスデータベースに接続します。 2番目の回答では、どのデータベースに接続するかは関係ありません。