sql >> データベース >  >> RDS >> PostgreSQL

ファイル内のpgsqlコマンドを実行するためのシェルスクリプト

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



    1. SQLServer2016の一時テーブルクエリプランの動作

    2. OracleSQLでデュアルから10,000の一意のIDのリストを選択する方法

    3. OracleでNVL()関数を使用する方法

    4. MySQLDBでトランザクションが機能しない