PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# SET TRANSACTION

## 名前

SET TRANSACTION -- 現在のトランザクションの特性の設定

## 概要

    SET TRANSACTION transaction_mode [, ...]
    SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]

    ここでtransaction_modeは以下のいずれかです。

        ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
        READ WRITE | READ ONLY

## 説明

`SET TRANSACTION`は現在のトランザクションの特性を設定します。 これはその後のトランザクションには影響をおよぼしません。 `SET SESSION CHARACTERISTICS`は、セッションにおける後続全てのトランザクションのデフォルトのトランザクション特性を設定します。 `SET TRANSACTION`により個々のトランザクションのデフォルト特性を上書きすることができます。

利用可能なトランザクション特性はトランザクションの隔離レベルとトランザクションのアクセスモード(読み書きモードもしくは読み取りのみモード)です。

以下に示すトランザクションの隔離レベルは、他のトランザクションが並行して実行している時に、そのトランザクションからどのようなデータを見ることができるかを決定するものです。

`READ COMMITTED`

  一つの文はそれが開始される前にコミットされた行のみ見ることができます。 これがデフォルトです。

`SERIALIZABLE`

  現在のトランザクションにおける全ての文は、このトランザクションで最初の問い合わせ文またはデータを変更する文が実行される前にコミットされた行だけを見ることができます。

標準SQLでは、`READ UNCOMMITTED`と`REPEATABLE READ`という、更に2つのレベルを定義しています。 PostgreSQLでは`READ UNCOMMITTED`は`READ COMMITTED`として扱われ、`REPEATABLE READ`は`SERIALIZABLE`として扱われます。

トランザクション隔離レベルは、そのトランザクションにおける最初の問い合わせやデータを変更する文(`SELECT`、`INSERT`、`DELETE`、`UPDATE`、`FETCH`、`COPY`)が実行された後に変更することはできません。 トランザクションの隔離や同時実行制御についての詳細情報は第12章を参照してください。

トランザクションのアクセスモードは、そのトランザクションが読み書き可能か読み取りのみかを決定します。 デフォルトは読み書き可能です。 読み取りのみのトランザクションでは、書き込み対象のテーブルが一時テーブルでない限り、`INSERT`、`UPDATE`、`DELETE`、および、`COPY TO`というSQLコマンドを実行できません。 また、`CREATE`、`ALTER`、`DROP`系の全てのSQLコマンド、および、`COMMENT`、`GRANT`、`REVOKE`、`TRUNCATE`は、読み取りのみのトランザクションでは全く実行できません。 更に、`EXPLAIN ANALYZE`と`EXECUTE`は、そのコマンドが上述のコマンドを実行するものであれば、実行できません。 これは、ディスクへの全ての書き込み防止を行わない、高度な読み取りのみの表現方法です。

## 注釈

`SET TRANSACTION`を`START TRANSACTION`や`BEGIN`の前に実行した場合、そのトランザクションは即座に終了しますので、効果は全く現れません。

代わりに`BEGIN`あるいは`START TRANSACTION`で目的の`transaction_modes`を指定することで、`SET TRANSACTION`を省くことができます。

セッションのデフォルトのトランザクションモードは、設定パラメータdefault_transaction_isolationとdefault_transaction_read_onlyで設定することができます。 （実際、`SET SESSION CHARACTERISTICS`はただの冗長なものであり、`SET`でこれらの変数を設定することと等価です。） これは、このデフォルトは設定ファイルや`ALTER DATABASE`などで設定可能であることを意味しています。 詳細は項16.4を参照してください。

## 互換性

どちらのコマンドも標準SQLで定義されています。 標準SQLではデフォルトのトランザクションは`SERIALIZABLE`です。 PostgreSQLでは `READ COMMITTED`が通常のデフォルトですが、これは上述の通り変更可能です。 述部ロックが存在しないため、`SERIALIZABLE`は完璧なシリアライザブルではありません。 詳細は第12章を参照してください。

標準SQLでは、もう一つ、診断領域の大きさという、トランザクション特性があり、このコマンドで設定可能です。 この概念は組み込みSQL固有のものですので、PostgreSQLサーバには実装されていません。

標準SQLでは、連続する`transaction_modes`の間にはコンマが必要です。 歴史的な理由よりPostgreSQLではコンマを省略することができます。

前のページ | ホーム | 次のページ
SET SESSION AUTHORIZATION | 上に戻る | SHOW