在 shell 中使用 CASE WHEN 语句触发 SQL 时,我遇到了一个奇怪的问题。
我的 SQL 看起来像:
insert into myschema.myTable (col1, col2, col3)
select col1,
CASE
WHEN col2 = 'NULL' THEN NULL
ELSE col2
END,
col3
from myschema.myTable_ext_table
(它正在从一个外部表加载数据,该表有一些提取为“NULL”字符串的 NULL 值,我们无法更改外部表设计)
我的目标是使用 nohup 运行 psql,以便大数据加载任务可以在后台运行。我的 psql 命令如下所示:
nohup sh -c 'date;psql -h myHAWQHost -d myHAWQDB --command "insert into myschema.myTable (col1, col2, col3) select col1, CASE WHEN col2 = 'NULL' THEN NULL ELSE col2 END, col3 from myschema.myTable_ext_table";date;' > myLog.out &
当我从任何客户端(pgAdmin/Aginity)触发 SQL 时,它运行良好。但是,当从 psql 命令运行时,它不起作用,因为 CASE WHEN 仍在将“NULL”字符串放在col2
列中。