【问题标题】:How to exit psql depending on the outcome of a query如何根据查询结果退出 psql
【发布时间】:2021-07-21 21:53:19
【问题描述】:
cd C:\Program Files\PostgreSQL\12\bin
psql.exe -v v1="test" -h localhost -d postgres -U postgres -p 5432 -a -q -f  /elan/Validate_files.sql
....

Select case when current_date-date(a.timestamp_1) >1 then 'No' Else 'Yes' End as Check
from elan.temp_file_names a
where a.filename not in (select b.filename from elan.temp_previous_names b)
and position('ELAN_CLAIMS' in a.filename)>1 order by timestamp_1 desc

\gset

如果Check为No,我想结束psql进程,我该怎么做?

【问题讨论】:

  • 当检查是“是”,或者有些是“是”有些是“否”时,你想做什么?
  • 这是测试存在的唯一位置。 SQL 的第一部分检查远程 sFTP 服务器是否有新文件,如果有新文件(是),那么我将继续进行其余的 SQL 编程。如果答案是(否),我只想结束 PSQL 语句(Validate_files.sql)
  • Select case when current_date-date(a.timestamp_1) >1 then 'False' Else 'True' End as Check from elan.temp_file_names a where a.filename not in (select b.filename from elan .temp_previous_names b) 和 position('ELAN_CLAIMS' in a.filename)>1 order by timestamp_1 desc \gset \IF :check psql:/elan/Validate_files.sql:37: error: invalid command \IF
  • 我尝试了如上所示的 /IF 语句,但 PSQL 无法识别 \IF
  • psql:/elan/Validate_files.sql:37: 错误:无效命令 \IF

标签: postgresql psql


【解决方案1】:

更改CASE 表达式以返回boolean

CASE WHEN ... THEN TRUE ELSE FALSE
END AS check ... \gset

然后使用\if:

\if :check
\q
\endif

【讨论】:

  • 为什么会不断收到无效命令/IF错误?
  • 我正在运行版本 12
  • --如果今天没有新文件,则结束进程 Select case when current_date-date(a.timestamp_1) >1 then TRUE Else FALSE End as Check from elan.temp_file_names a where a.filename not in (从 elan.temp_previous_names b) 中选择 b.filename 和 position('ELAN_CLAIMS' in a.filename)>1 order by timestamp_1 desc; check ------- t (1 row) \gset \echo :check t \IF :check psql:/elan/Validate_files.sql:40: error: invalid command \IF
  • \gset 之前的分号看起来很糟糕。
  • 尝试正确的方法。在上面的错误评论中,您有 order by timestamp_1 desc; 这里面有一个分号。那是错的。您在问题中的原始代码是正确的。
猜你喜欢
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
相关资源
最近更新 更多