postgres procedura脚本不读取file.sh提供的输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgres procedura脚本不读取file.sh提供的输入相关的知识,希望对你有一定的参考价值。

我有一个运行psql脚本的问题。

这是输出:

File.SQL:155: ERROR: syntax error at or near ":" LINE 10: date_temp_Ale INTEGER := :'param_date';

我有一个文件调用“File.sql”与输入变量。这是调用sql脚本的行:

line in file.sh:

echo le numero des parametres est bien 7 
psql -v PGPASSWORD=$MDP -h $IP_MACHINE -f $FIC_REQ_SQL -v param_date=20180101  -U  $UTILISATEUR -d $NOM_BDD -p $PORT > $FIC_LOG_EXEC_TMP 2>&1  


echo Done in $FIC_LOG_EXEC_TMP

这是psql脚本中的一行:line in file.sql

--- UT 48  PURGE DES TRACES
set ON_ERROR_STOP on

BEGIN; -- DEBUT DE TRANSACTION

 DO $$ 
DECLARE
  num_tra_err_id RECORD;
  num_trace_composant RECORD;
  num_trace_fonctionnelle RECORD;
  num_message_id RECORD;
  num_metadonnees_id RECORD;
  num_Process_id RECORD;
  datediff integer;
  date_temp_Ale INTEGER := :'param_date';      

  Max_days  integer := 180;
  --date_limite varchar := &1;
BEGIN

我也尝试在file.sh中使用命令“--set”,但它不起作用。

答案

我找到了解决方案:

DO语句将内部代码与外部代码隔离开来。

传递我们需要的信息将其存储为psql变量,如下所示

select set_config('psql.param_date', :param_date, false);

BEGIN; -- DEBUT DE TRANSACTION

  DO 

  $$ 

    DECLARE

      limit_date varchar = current_setting('psql.param_date');

以上是关于postgres procedura脚本不读取file.sh提供的输入的主要内容,如果未能解决你的问题,请参考以下文章

pgfouine.php 读取 Postgres 日志时出错

如何从 node.js 中的 postgresql 脚本中读取

迁移postgres时序列错误脚本修复

使用 Node.js 和 AWS Lambda 将 S3 文件的内容记录到 postgres 表

sql 用于创建抱怨的Postgres数据库的小脚本:```PG :: InvalidParameterValue:ERROR:编码UTF8与区域设置e不匹配

Shell脚本中的逻辑判断