我目前正在尝试将bash变量用于PSQL函数,我在bash脚本中运行PSQL文件就像这样......
psql -h *DBHOST* -p *DBPORT* -U *DBUSER* -d *DBNAME* -f ./file.sql \
-v var1=$bash_var1 -v var2=$bash_var2
在psql文件中,我可以通过...
访问变量:'var1' and :'var2'
我在一个函数中尝试过,这是函数的一部分
CREATE OR REPLACE FUNCTION rename()
RETURNS void LANGUAGE plpgsql AS
$func$
DECLARE
title TEXT;
newTitle TEXT;
docId TEXT;
new_docId TEXT;
var1 INT;
var2 TEXT;
BEGIN
CREATE TABLE IF NOT EXISTS files_renamed (
uuid char(40) ,
name char (250),
origin char (20)
);
FOR _r IN SELECT * from table LOOP
docId := _r.id ;
title := _r.title ;
SELECT substring(docId, 1, doc_id_len) INTO new_docId;
SELECT CONCAT(new_docId,:'var2') INTO newTitle;
-- other codes --
END LOOP;
END
$func$;
但是在这个PSQL函数中,它没有用。 它返回了这个错误......
错误:“:”
处或附近的语法错误
有没有人知道如何正确地做到这一点? 谢谢,伙计们。
答案 0 :(得分:0)
您需要使用dynamic SQL。也就是说,将整个功能块放入一个字符串中,并将引用的脚本变量传递到适当的位置,然后执行该字符串。另请参阅this SO主题( Postgres动态查询函数),了解如何构建语句。
EXECUTE
'CREATE OR REPLACE FUNCTION rename()' ||
... || :'var1' || ... || 'END'