首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PostgreSQL:如何从命令行传递参数?

PostgreSQL:如何从命令行传递参数?
EN

Stack Overflow用户
提问于 2011-09-12 22:24:58
回答 6查看 111.9K关注 0票数 111

在使用?占位符的脚本中,我有一个比较详细的查询。我想直接从psql命令行(在脚本之外)测试同样的查询。我希望避免进入并将所有?替换为实际值,而是希望在查询之后传递参数。

示例:

代码语言:javascript
复制
SELECT  * 
FROM    foobar
WHERE   foo = ?
   AND  bar = ?
    OR  baz = ?  ;

查找类似以下内容:

代码语言:javascript
复制
%> {select * from foobar where foo=? and bar=? or baz=? , 'foo','bar','baz' };
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-12 22:39:37

你可以使用-v结构,例如

代码语言:javascript
复制
psql -v v1=12  -v v2="'Hello World'" -v v3="'2010-11-12'"

然后引用sql中的变量:v1、:v2等

代码语言:javascript
复制
select * from table_1 where id = :v1;

请注意我们如何使用双引号" '...' "传递字符串/日期值

票数 207
EN

Stack Overflow用户

发布于 2011-09-12 23:41:48

在PostgreSQL中,您可以像在脚本语言中一样使用PREPARE statements。不幸的是,您仍然不能使用?,但是您可以使用$n表示法。

使用上面的示例:

代码语言:javascript
复制
PREPARE foo(text,text,text) AS
    SELECT  * 
    FROM    foobar
    WHERE   foo = $1
       AND  bar = $2
        OR  baz = $3  ;
EXECUTE foo('foo','bar','baz');
DEALLOCATE foo;
票数 34
EN

Stack Overflow用户

发布于 2011-09-12 22:43:38

在psql中有一种机制,通过

代码语言:javascript
复制
\set name val

命令,该命令应该与-v name=val命令行选项绑定。引用是痛苦的,在大多数情况下,在这里将整个查询放在一个shell -document中更容易。

编辑

哦,我应该说-v而不是-P (用于格式化选项)之前的回答是正确的。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7389416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档