Сценарий процедуры postgres не читает входные данные, предоставленные file.sh
У меня есть проблема, выполняющая сценарий psql.
это вывод:
У меня есть файл.sh, который вызывает "File.sql" с и переменная ввода. вот строка, которая вызывает скрипт sql:
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');