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)'按預期工作。 –