DOは無名コードブロック、言い換えると、手続き言語内の一時的な無名関数を実行します。
コードブロックはあたかもパラメータを取らずにvoidを返す関数の本体かのように扱われます。 これは解析され、一回実行されます。
省略可能なLANGUAGE句をコードブロックの前または後ろにつけることができます。
実行される手続き言語のコードです。 これは、CREATE FUNCTIONの場合と同様、文字列リテラルとして指定しなければなりません。 ドル記号による引用符付けの使用を勧めます。
コードの作成に使用する手続き言語の名前です。 省略時のデフォルトはplpgsqlです。
使用される手続き言語は常に、CREATE LANGUAGEを使用して現在のデータベースにインストールされていなければなりません。 plpgsqlはデフォルトでインストールされますが、他の言語はインストールされません。
ユーザは手続き言語に対するUSAGE権限を持たなければなりません。 また、言語が信用できない場合はスーパーユーザでなければなりません。 これは、その言語における関数作成に必要な権限と同じです。
publicスキーマ内のすべてのビューに対するすべての権限を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$$;