Сценарий процедуры postgres не читает входные данные, предоставленные file.sh

У меня есть проблема, выполняющая сценарий psql.

это вывод:

File.SQL: 155: ОШИБКА: синтаксическая ошибка в или около ":" ЛИНИЯ 10: date_temp_Ale INTEGER: =: 'param_date';

У меня есть файл.sh, который вызывает "File.sql" с и переменная ввода. вот строка, которая вызывает скрипт sql:

строка в файле.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: строка в 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

я также попытался использовать команду " --set " в файле.sh, но она не сработала.

1 ответ

Я нашел решение:

оператор 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');
Другие вопросы по тегам