DO — exécute un bloc de code anonyme
DO [ LANGUAGE nom_langage ] code
DO exécute un bloc de code anonyme, autrement dit une fonction temporaire dans le langage de procédure indiqué.
Le bloc de code est traité comme le corps d'une fonction sans paramètre et renvoyant void. Il est analysé et exécuté une seule fois.
La clause LANGUAGE optionnelle est utilisable avant ou après le bloc de code.
Le code à exécuter. Il doit être spécifié comme une chaîne litérale, tout comme une fonction CREATE FUNCTION. L'utilisation de la syntaxe des guillemets dollar est recommandée.
Le nom du langage utilisé par le code. Par défaut à plpgsql.
Le langage de procédure utilisé doit déjà être installé dans la base de données avec l'instruction CREATE LANGUAGE. plpgsql est installé par défaut contrairement aux autres langages.
L'utilisateur doit avoir le droit USAGE sur le langage de procédures ou être un superutilisateur s'il ne s'agit pas d'un langage de confiance. Il s'agit des mêmes prérequis que pour la création d'une fonction dans ce langage.
Donner les droits sur toutes les vues du schéma public au rôle webuser :
DO $$DECLARE r record; BEGIN FOR r IN SELECT table_schema, table_name FROM information_schema.tables WHERE table_type = 'VIEW' AND table_schema = 'public' LOOP EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser'; END LOOP; END$$;