Ich frage mich, ob es möglich ist, SET und SELECT innerhalb einer einzigen Abfrage. Etwas wie folgt aus:SET und SELECT innerhalb einer einzigen Abfrage?
SET LOCAL search_path TO "1"; SET LOCAL ROLE "user"; SELECT * from posts;
Ich frage mich, ob es möglich ist, SET und SELECT innerhalb einer einzigen Abfrage. Etwas wie folgt aus:SET und SELECT innerhalb einer einzigen Abfrage?
SET LOCAL search_path TO "1"; SET LOCAL ROLE "user"; SELECT * from posts;
Sie so etwas tun könnte:
with some_set as (
select set_config('search_path', '"1"', true)
)
select * from posts;
oder nur SELECT
mit set_config()
Anrufe w/o CTE, aber im Allgemeinen wird dir nicht helfen, weil:
Es gibt keine Garantie, dass Sie die gewünschte Reihenfolge der Ausführung der Teile Ihrer Abfrage erhalten (denken Sie daran, dass SQL eine deklarative Sprache ist, siehe auch 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 und https://dba.stackexchange.com/questions/86263/managing-cte-execution-order-under-uncertainty)
AFAIK gibt es keine Möglichkeit, DB-Rolle mit SELECT
zu wechseln.
Dank @Nick! Nur um klar zu sein, stellt WITH sicher, dass es ausgeführt wird, bevor er 'aus Posts 'auswählt? Oder nicht einmal das? – Matt
Nein, es gilt nicht: "Wenn in WITH datenverändernde Anweisungen verwendet werden, ist die Reihenfolge, in der die angegebenen Aktualisierungen tatsächlich stattfinden, nicht vorhersehbar." https://www.postgresql.org/docs/current/static/queries-with.html - in meinen Experimenten wurde 'SELECT' ausgeführt * bevor *' select_config', deshalb habe ich geschrieben, dass es dir nicht helfen wird . – Nick
Sieht aus wie 'select set_config ('timezone', tzone, true), to_char (tstamp, mask) 'funktioniert wie erwartet. –