★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

DO

DO — 無名コードブロックを実行します。

概要

DO [ LANGUAGE lang_name ] code

説明

DOは無名コードブロック、言い換えると、手続き言語内の一時的な無名関数を実行します。

コードブロックはあたかもパラメータを取らずにvoidを返す関数の本体かのように扱われます。 これは解析され、一回実行されます。

LANGUAGE句をコードブロックの前または後ろにつけることができます。

パラメータ

code

実行される手続き言語のコードです。 これは、CREATE FUNCTIONの場合と同様、文字列リテラルとして指定しなければなりません。 ドル記号による引用符付けの使用を勧めます。

lang_name

コードの作成に使用する手続き言語の名前です。 省略時のデフォルトはplpgsqlです。

注釈

使用される手続き言語は、CREATE EXTENSIONを使用して現在のデータベースにインストール済みでなければなりません。 plpgsqlはデフォルトでインストールされますが、他の言語はインストールされません。

ユーザは手続き言語に対するUSAGE権限を持たなければなりません。 また、言語が信用できない場合はスーパーユーザでなければなりません。 これは、その言語における関数作成に必要な権限と同じです。

DOがトランザクションブロック内で実行された場合、プロシージャコードはトランザクション制御文を実行できません。 DOが自身のトランザクション内で実行された場合にのみ、トランザクション制御文は認められます。

スキーマ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$$;

互換性

標準SQLにはDO文はありません。

関連項目

CREATE LANGUAGE