Hallo,
ich erzeuge mir mittels des folgenden SELECT Befehls Statements zum 'granten' von Rechten.
Nun möchte ich die Befehle die dieser SELECT liefert gerne allesamt ausführen. Wie würdet ihr das machen?Code:SELECT 'GRANT SELECT ON ' || relname || ' TO viewer;' FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace WHERE nspname = 'public' AND relkind IN ('r', 'v');
Mein erster Ansatz war es die Statements in einen Record zu schreiben und diesen dann durch zu iterieren. Funktioniert leider noch nicht ganz.
Wenn ich zum testen das selectete in record inserten will, bleibt dieser leer.
Mein zweiter Ansatz wäre es eventuell mit einer Row-Typen variablen zu machen.
Was davon wäre die bessere Variante? Oder vielleicht hat jemand ja noch eine andere Idee.
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Dass der Befehl mit EXECUTE ausgeführt werden muss weiß ich. Das Problem war bis jetzt, dass jede Zeile des Select's ausgeführt werden muss. Also in einer Schleife und das hat Probleme bereitet.
Bin auch noch nicht so ganz hinter die Funktionsweise von "FOR record IN ..." gestiegen.
ich hab gerade ein Beispiel gefunden:
Wenn ich das jetzt für meinen Select anpasse, sagt er mir dass ein Loop fehlt.Code:declare r record; begin for r in EXECUTE ''select * from '' || $1 loop return next r; end loop;
Wie gesagt, so ganz seh ich da noch nicht durch.Code:grant_expressions RECORD; BEGIN FOR grant_expressions IN EXECUTE 'SELECT 'GRANT SELECT ON ' || relname || ' TO viewer;' as t FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace WHERE nspname = 'public' AND relkind IN ('r', 'v')' LOOP RETURN NEXT grant_expressions; END LOOP; RETURN;
schreib es halt einfach ab ...Code:[09:00] <akretschmer> ??grantall [09:00] <pg_docbot> For information about 'grantall' see: [09:00] <pg_docbot> http://pgedit.com/public/sql/acl_admin/index.html :: http://www.onlamp.com/databases/2006/01/19/examples/plperl-article-2.sql :: http://www.depesz.com/index.php/2007/10/19/grantall/ :: http://www.depesz.com/index.php/2009/11/07/waiting-for-8-5-grant-all/
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen