【发布时间】:2017-08-16 09:58:34
【问题描述】:
我目前正在尝试将 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 函数内部,它不起作用。 它返回了这个错误...
错误:“:”或附近的语法错误
有人知道如何正确执行此操作吗? 谢谢各位。
【问题讨论】:
-
我不是 PSQL 用户,但您似乎需要以正确的方式将变量传递给函数体。这意味着,您可能需要将字符串放在引号中。并且提供一些更详细的示例代码会很有帮助。
-
试试 -v var1=a${bash_var1}b 看看你的函数是否收到'ab'
-
请edit问题包含实际的PSQL函数。
-
我编辑了问题
-
在函数之外,我尝试了 'SELECT :'var1';它有效,但在函数内部它返回了一个错误。