介绍
当使用Greenplum构架数仓时,经常需要一个SQL文件执行多个SQL,所以需要关注任何SQL的报错,这时ON_ERROR_STOP参数就可以使用。
如果ON_ERROR_STOP参数设置后,当SQL文件中的任何SQL报错后,就会停止执行接下来的SQL。
例如:
cat sample_test.sql
/set ON_ERROR_STOP on
select * from t1;
select * from t2;
select * from t23;
select * from t1;
/unset ON_ERROR_STOP
当你从SQL文件中执行SQL时,psql会返回下面的退出状态。
- 0:如果SQL正常执行完成
- 1:如果发生严重的错误(内存溢出,文件没发现)
- 2:如果连接服务器失败
- 3:当ON_ERROR_STOP参数设置后,SQL文件中的任何一个SQL报错后。
psql提供-f选项执行SQL文件,当发生错误时,有两种方法停止执行,并退出执行。
- 在命令行包含-v ON_ERROR_STOP=ON
- 在SQL文件中设置ON_ERROR_STOP参数
例子
sample_sql.sql
\set ON_ERROR_STOP on
select * from t1;
select * from t2; -- This table is does not exists in the database so psql will stop execution at this point
select * from t23;
select * from t1;
\unset ON_ERROR_STOP
如果不添加ON_ERRO_STOP参数,当报错后,也会继续执行。
也可以在命令行设置ON_ERROR_STOP参数
psql -d template1 -h <hostname> -v ON_ERROR_STOP=ON -f '/home/gpadmin/sample_test.sql'