1
我想知道是否可以在单个查询中进行SET和SELECT。事情是这样的:单个查询中的SET和SELECT?
SET LOCAL search_path TO "1"; SET LOCAL ROLE "user"; SELECT * from posts;
我想知道是否可以在单个查询中进行SET和SELECT。事情是这样的:单个查询中的SET和SELECT?
SET LOCAL search_path TO "1"; SET LOCAL ROLE "user"; SELECT * from posts;
你可以做这样的事情:
with some_set as (
select set_config('search_path', '"1"', true)
)
select * from posts;
或只是set_config()
呼叫W/O CTE SELECT
,但一般不会帮你,因为:
不能保证你会得到你想要查询的部分的执行顺序(请记住,SQL是一种声明性语言,另请参阅https://www.google.com/search?q=postgresql+cte+order+not+guaranteed&oq=postgresql+cte+order+&aqs=chrome.1.69i57j69i59l2j69i64.6362j0j7&sourceid=chrome&ie=UTF-8和https://dba.stackexchange.com/questions/86263/managing-cte-execution-order-under-uncertainty)
AFAIK没有办法与SELECT
切换数据库角色。
Thanks @Nick!要明确,WITH确保它在'select * from posts'之前执行?或者甚至没有? – Matt
不,它不会:“在WITH中使用数据修改语句时,指定更新实际发生的顺序是不可预知的。” https://www.postgresql.org/docs/current/static/queries-with.html - 在我的实验中,主'SELECT'在*'select set_config'之前执行*,这就是为什么我写道它不会帮助你。 – Nick
看起来像'select set_config('timezone',tzone,true),to_char(tstamp,mask)'按预期工作。 –