#postgresql #psql
#postgresql #psql
Вопрос:
psql версии 9.2, сервер версии 12.0.
Попытка передать параметр в сценарий sql , выполнение сценария и передача параметра :
psql --echo-queries -v ON_ERROR_STOP=0 -v TEST=100 postgresql://${curr_connection}lt;lt; EOF 1 gt; ${log_file} 2gt;amp;1 timing i sql_script.sql EOF
Пожалуйста, обратите внимание, что я подтверждаю, что скрипт работает без проблем при использовании жестко заданного значения(без параметра) , Я предполагаю, что это может быть связано с тем, что параметр внутри цитаты или что-то в этом роде,
sql_script.sql
INSERT INTO ACT_HI_COMMENT (action_,full_msg_,id_,message_,proc_inst_id_,task_id_,time_,type_,user_id_) SELECT * FROM DBLINK ('host= MYHOST user=MYUSER password = MYPASS dbname=MYDB port=6432', 'SELECT ACT_HI_COMMENT.message_,ACT_HI_COMMENT.proc_inst_id_ FROM ACT_HI_COMMENT where ACT_HI_COMMENT.TASK_ID_ in (Select distinct CBAN_A.TASK_ID_ from CBAN_OSS_ACT_RU_VARIABLE_TASK where CBAN_OSS_ACT_RU_VARIABLE_TASK.GROUP_ID = :TEST )') AS LINKTABLE (proc_inst_id_ character varying,task_id_ character varying,time_ timestamp without time zone,type_ character varying, user_id_ character varying);
Получение ошибки:
psql:/infadmin/inf/sql_script.sql:2: ERROR: syntax error at or near ":" CONTEXT: while executing query on unnamed dblink connection
Я также попробовал использовать одинарные кавычки вокруг него как :»ТЕСТ»
INSERT INTO ACT_HI_COMMENT (action_,full_msg_,id_,message_,proc_inst_id_,task_id_,time_,type_,user_id_) SELECT * FROM DBLINK ('host= MYHOST user=MYUSER password = MYPASS dbname=MYDB port=6432', 'SELECT ACT_HI_COMMENT.message_,ACT_HI_COMMENT.proc_inst_id_ FROM ACT_HI_COMMENT where ACT_HI_COMMENT.TASK_ID_ in (Select distinct CBAN_A.TASK_ID_ from CBAN_OSS_ACT_RU_VARIABLE_TASK where CBAN_OSS_ACT_RU_VARIABLE_TASK.GROUP_ID = :'TEST' )') AS LINKTABLE (proc_inst_id_ character varying,task_id_ character varying,time_ timestamp without time zone,type_ character varying,user_id_ character varying);
Получение ошибки:
psql:/infadmin/inf/sql_script.sql:2: ERROR: syntax error at or near "TEST" LINE 2: ... where CBAN_OSS_ACT_RU_VARIABLE_TASK.GROUP_ID = :'TEST' ..
Ответ №1:
Как подозреваю , это не сработало, так как параметр находится внутри одинарных кавычек , я решил эту проблему, разделив всю строку внутри кавычек на 2, путем
' first_part '|| :'TEST'||' lt;second_partgt;'
Таким образом, sql выглядит так
INSERT INTO ACT_HI_COMMENT (action_,full_msg_,id_,message_,proc_inst_id_,task_id_,time_,type_,user_id_) SELECT * FROM DBLINK ('host= MYHOST user=MYUSER password = MYPASS dbname=MYDB port=6432', 'SELECT ACT_HI_COMMENT.message_,ACT_HI_COMMENT.proc_inst_id_ FROM ACT_HI_COMMENT where ACT_HI_COMMENT.TASK_ID_ in (Select distinct CBAN_A.TASK_ID_ from CBAN_OSS_ACT_RU_VARIABLE_TASK where CBAN_OSS_ACT_RU_VARIABLE_TASK.GROUP_ID = '|| :'TEST'||' )') AS LINKTABLE (proc_inst_id_ character varying,task_id_ character varying,time_ timestamp without time zone,type_ character varying,user_id_ character varying); ``