まず、しない 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番目の回答では、どのデータベースに接続するかは関係ありません。