ablog

不器用で落着きのない技術者のメモ

Redshift のエラーハンドリングとエラーメッセージの確認方法

copy customer from 's3://awssampledbuswest2/ssbgz/customer'
credentials 'aws_iam_role=arn:aws:iam::123456789012:role/RedshiftRole'
gzip compupdate off region 'us-west-2';
# create schema admin;
# create or replace view admin.v_my_last_copy_errors as 
select query, 
       starttime,
       filename, 
       line_number,
       err_reason,
       colname,
       type column_type,
       col_length,
       raw_field_value
from stl_load_errors le
where le.query = pg_last_copy_id();
  • 実行する
    • パスワードの指定は環境変数と .pgpass に記述する方法があり、.pgpass 推奨だがとりあえず。
$ export PGPASSWORD=<パスワード>
$ psql --set ON_ERROR_STOP=on "host=redshift-cluster-1.******.us-west-2.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -f copy.sql
psql:copy.sql:3: ERROR:  Cannot COPY into nonexistent table customer ★エラーメッセージ
$ echo $?
3 ★戻り値(正常終了は0
  • エラーメッセージを参照する。
$ psql "host=redshift-cluster-1.******.us-west-2.redshift.amazonaws.com user=awsuser dbname=dev port=5439"
# select * from admin.v_my_last_copy_errors;

参考

終了状態
psqlは、正常に終了した時には0を、psqlにとって致命的なエラー(メモリ不足やファイルが見つからないなど)が発生した時には1を、セッションが対話式でない状態でサーバとの接続が不完全になった時には2を、ON_ERROR_STOP変数が設定されている状態でスクリプトでエラーが発生した時には3をシェルに返します。

https://www.postgresql.jp/document/8.1/html/app-psql.html