DO
Name
DO -- execute an anonymous code blockSynopsis
DO [ LANGUAGE lang_name ] code
Description
DO
executes an anonymous code block, or in other words a transient anonymous function in a procedural language.
The code block is treated as though it were the body of a function with no parameters, returning void
. It is parsed and executed a single time.
The optional LANGUAGE
clause can be written either before or after the code block.
Parameters
code
-
The procedural language code to be executed. This must be specified as a string literal, just as in
CREATE FUNCTION
. Use of a dollar-quoted literal is recommended. lang_name
-
The name of the procedural language the code is written in. If omitted, the default is
plpgsql
.
Notes
The procedural language to be used must already have been installed into the current database by means of CREATE LANGUAGE
. plpgsql
is installed by default, but other languages are not.
The user must have USAGE
privilege for the procedural language, or must be a superuser if the language is untrusted. This is the same privilege requirement as for creating a function in the language.
Examples
Grant all privileges on all views in schema public
to role 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$$;
Compatibility
There is no DO
statement in the SQL standard.
See Also
CREATE LANGUAGE
© 1996–2019 The PostgreSQL Global Development Group
Licensed under the PostgreSQL License.
https://www.postgresql.org/docs/9.6/sql-do.html