2016-11-22 4 views
0

私は、redshiftで実行されるddlを使用して複数のスキーマを作成しようとしています。これらのスキーマをループすると、それらのスキーマ内にテーブルを作成するためにすでに作成したddlsが実行されます。誰も私にそれをする正しいアプローチを提案することはできますか?PL/pgsql DDLを使ってredshiftでスキーマを作成し、ddlsをループしてそれぞれのスキーマにテーブルを作成するには?

答えて

0

レッドシフトはPL/pgsqlをサポートしていません。シェルスクリプトを使用するなど、外部で行う必要があります。

#!/bin/bash 

# Create schemas in schema list 
# * Generate check SQL 
# * Check if schema exists 
# * Create schema if it doesn't 

echo " --------------------------------------------" 
echo " CREATING SCHEMAS >>" 
while read p; do 
    echo " '$p' >>"; 
    sql="SELECT 1 as exists FROM information_schema.schemata WHERE schema_name = '$p';" 
    check=`psql -d "$1" -t -c "$sql"`; 
    # If $check is `null` 
    if [ -z "$check" ]; then 
     sql="CREATE SCHEMA $p;"; 
     create=`psql -d "$1" -c "$sql";` 
     # If $create = `CREATE SCHEMA` 
     if [ "$create" = "CREATE SCHEMA" ]; then 
      echo "  << '$p' - CREATED"; 
     else 
      echo "  << '$p' - ERROR"; 
     fi 
    else 
     echo "  << '$p' - EXISTS"; 
    fi 
done < ../Configuration/SETUP_Schemas.txt 
echo " << DONE" 
echo " --------------------------------------------" 
+0

ありがとう@ジョー、私はそれを実行しようとしますが、このシェルスクリプトを使用して複数のスキーマを作成できますか?配列やループを定義するのと同じです。私は本当にあなたの助けに感謝します。 – Sam

+0

この例では、 'SETUP_Schemas.txt'には作成されるスキーマ名の簡単なリストが含まれており、スクリプトはそれをループします。 'SETUP_Schemas.txt'の各行の内容は変数' $ p'として 'while'ループに入ります。同じ方法を使用して、テーブルのリストをループすることができます(各テーブルのDDLファイルでスクリプトを指す)。 –

+0

ありがとう@ジョー、それをやろうとします。あなたの助けに感謝。 – Sam

関連する問題