postgresql - 在带有 sql 和 sh 脚本的函数中使用变量
问题描述
我正在开发一组将由 .sh 脚本调用的 .sql 脚本。在这个 .sh 脚本中,我使用以下命令:
psql "connection parameters" -f ./myscript.sql -v var1 = "schema.table"
目前一切都很好。
在我的 .sql 脚本中,我目前有这个:
CREATE or replace FUNCTION myFunction (tarteenpion varchar) RETURNS void AS $$
DECLARED
MONTH_MM varchar: = to_char (current_timestamp, 'MM');
YEAR_AAAA varchar: = to_char (current_timestamp, 'YYYY');
YEAR_AA varchar: = to_char (current_timestamp, 'YY')
cmd varchar: = 'DROP TABLE IF EXISTS' || tarteenpion || ';' ;
BEGIN
execute cmd;
END;
$$ LANGUAGE plpgsql;
--SELECT myFunction ('schema.table');
SELECT myFunction (: var1);
DROP FUNCTION myFunction (tarteenpion varchar);
我的问题来自使用我的外部变量:var1 - 如果我直接用'写我的值'schema.table',函数运行正确。但我不想那样。
- 如果我写我的变量 :var1 没有 ' 我有这个错误
选择我的函数(:var1);=> 错误:缺少表“模式”的 FROM 子句条目
第 1 行:选择 myFunction (schema.table);
所以它被函数解释为不可用。
- 如果我用 ' 写我的变量 ':var1' 我有这个错误
选择 myFunction (':var1'); => 错误:“:”处或附近的语法错误
第 1 行:如果存在则删除表:var1
所以它不被解释,而是被函数使用。
能否指导我找到困扰我很久的解决方案。谢谢 :)
解决方案
您可以psql
用单引号引用变量值:
SELECT myFunction (:'var1');
那将被替换为
SELECT myFunction ('schema.table');
推荐阅读
- c# - 在 C# 中运行和使用 mimikatz
- trac - 在 TRAC 工单表单中启用里程碑字段
- wordpress - WooCommerce:钩子中添加的产品具有相同的变化
- laravel - 尝试块中出错时如何显示默认的laravel错误页面?
- python-3.x - Telegram API 在 120 秒的睡眠时间发送 50 条消息后抛出 PeerFloodError
- macos - Charles Proxy 使 mac os bigsur 自动重启
- reactjs - Next.js:Keycloak 实例不代表当前登录状态
- java - Java加密序列化消息
- javascript - 文件 index.js 中的 document.getElementById(id),它是 javascript 客户端吗?
- wordpress - 我们如何在 WordPress 网站中添加 Mesibo 聊天?