'\" t .\" Title: DO .\" Author: The PostgreSQL Global Development Group .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2023 .\" Manual: PostgreSQL 15.4 Documentation .\" Source: PostgreSQL 15.4 .\" Language: English .\" .TH "DO" "7" "2023" "PostgreSQL 15.4" "PostgreSQL 15.4 Documentation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" DO \- execute an anonymous code block .SH "SYNOPSIS" .sp .nf DO [ LANGUAGE \fIlang_name\fR ] \fIcode\fR .fi .SH "DESCRIPTION" .PP \fBDO\fR executes an anonymous code block, or in other words a transient anonymous function in a procedural language\&. .PP 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\&. .PP The optional LANGUAGE clause can be written either before or after the code block\&. .SH "PARAMETERS" .PP \fIcode\fR .RS 4 The procedural language code to be executed\&. This must be specified as a string literal, just as in \fBCREATE FUNCTION\fR\&. Use of a dollar\-quoted literal is recommended\&. .RE .PP \fIlang_name\fR .RS 4 The name of the procedural language the code is written in\&. If omitted, the default is plpgsql\&. .RE .SH "NOTES" .PP The procedural language to be used must already have been installed into the current database by means of \fBCREATE EXTENSION\fR\&. plpgsql is installed by default, but other languages are not\&. .PP 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\&. .PP If \fBDO\fR is executed in a transaction block, then the procedure code cannot execute transaction control statements\&. Transaction control statements are only allowed if \fBDO\fR is executed in its own transaction\&. .SH "EXAMPLES" .PP Grant all privileges on all views in schema public to role webuser: .sp .if n \{\ .RS 4 .\} .nf DO $$DECLARE r record; BEGIN FOR r IN SELECT table_schema, table_name FROM information_schema\&.tables WHERE table_type = \*(AqVIEW\*(Aq AND table_schema = \*(Aqpublic\*(Aq LOOP EXECUTE \*(AqGRANT ALL ON \*(Aq || quote_ident(r\&.table_schema) || \*(Aq\&.\*(Aq || quote_ident(r\&.table_name) || \*(Aq TO webuser\*(Aq; END LOOP; END$$; .fi .if n \{\ .RE .\} .SH "COMPATIBILITY" .PP There is no \fBDO\fR statement in the SQL standard\&. .SH "SEE ALSO" CREATE LANGUAGE (\fBCREATE_LANGUAGE\fR(7))