在使用?
占位符的脚本中,我有一个比较详细的查询。我想直接从psql命令行(在脚本之外)测试同样的查询。我希望避免进入并将所有?
替换为实际值,而是希望在查询之后传递参数。
示例:
SELECT *
FROM foobar
WHERE foo = ?
AND bar = ?
OR baz = ? ;
查找类似以下内容:
%> {select * from foobar where foo=? and bar=? or baz=? , 'foo','bar','baz' };
发布于 2011-09-12 22:39:37
你可以使用-v结构,例如
psql -v v1=12 -v v2="'Hello World'" -v v3="'2010-11-12'"
然后引用sql中的变量:v1、:v2等
select * from table_1 where id = :v1;
请注意我们如何使用双引号" '...' "
传递字符串/日期值
发布于 2011-09-12 23:41:48
在PostgreSQL中,您可以像在脚本语言中一样使用PREPARE
statements。不幸的是,您仍然不能使用?
,但是您可以使用$n
表示法。
使用上面的示例:
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;
发布于 2011-09-12 22:43:38
在psql中有一种机制,通过
\set name val
命令,该命令应该与-v name=val
命令行选项绑定。引用是痛苦的,在大多数情况下,在这里将整个查询放在一个shell -document中更容易。
编辑
哦,我应该说-v
而不是-P
(用于格式化选项)之前的回答是正确的。
https://stackoverflow.com/questions/7389416
复制相似问题