【PostgreSQL】PostgreSQL のトランザクションについて【Part.10】

今回は PostgreSQL のトランザクションについて解説します。

 

 

トランザクションとは?

トランザクションとは、データベースのデータを利用する時(処理する時)に、複数の処理を一連のものとしてまとめる単位のことを言います。

例えば、Aさんの銀行の口座から、Bさんの銀行口座にお金(500円)を振り込む場合、

をワンセットで処理する必要があります。

この処理が片方だけとか、2つの足し引き処理の間に他の処理が入ると不整合が発生する可能性があります。

 

一連の処理がすべて問題なく行われたときは「コミット」で終了し、途中でエラーなどが発生した場合は「ロールバック」を行うことで、データベースの整合性を保ちます。

 

 

トランザクションの特徴

データベースのトランザクションには「ACID特性」と呼ばれる性質があります。

 

 

トランザクションのコマンド

 

ROLLBACK と ABORT はトランザクションの開始からの処理をすべて取り消します。

しかしセーブポイント(SAVEPOINT)で一部のみ保存することができます。

 

 

トランザクションの SQL コマンドの反映のタイミング

1つのトランザクションが、BEGIN コマンドで開始された場合、その後の各 SQL コマンド(SQL 文)は COMMIT コマンドでトランザクションが終了することにより初めて反映されます。

 

自動コミットがONの場合(autocommit が有効)

ただし、「自動コミット」「ON」になっている場合は、SQL コマンドが実行されたタイミングで反映されます。

PostgreSQL ではデフォルトで「autocommit」が「有効」になっているので、BEGIN コマンドなどで明示的にトランザクションを開始していない限りは SQL 文を実行するごとにコミットされます。

 

 

 

 

 

トランザクションの分離レベル

トランザクションの分離レベルとは、他にもトランザクションが実行されていた場合にどれくらい影響を受けるのかをレベルにしたものです。

 

■PostgreSQL で設定できる分離レベル

 

 

■デフォルトの postgresql.conf ファイル

-bash-4.2$ less postgresql.conf

 

~ 省略 ~

 

#check_function_bodies = on
#default_transaction_isolation = 'read committed' ← デフォルトは「READ

 COMMITTED」に設定されています。

#default_transaction_read_only = off
#default_transaction_deferrable = off
#session_replication_role = 'origin'
#statement_timeout = 0

 

 

トランザクション時に発生する現象

現象としては以下の3つがあります。

トランザクションの分離レベルに応じて以下の3つの現象を防ぐことができます。

 

 

 

トランザクションの開始(BEGIN or START TRANSACTION)

新しいトランザクションを開始します。

BEGIN と START TRANSACTION は同様です。

 

 

 

トランザクションの停止(ABORT or ROLLBACK)

ABORT で現在のトランザクションをアボート(停止)できます。

現在実行中のトランザクションはロールバックされ、そのトランザクションで行われた更新はすべて元の状態に戻されます。

※ABORT コマンドは ROLLBACK コマンドと一緒です。

 

 

トランザクションを確定する(COMMIT or END)

COMMIT と END はトランザクションを確定(コミット)します。

 

 

 

ロックモード

PostgreSQL にはデータに対する同時アクセスを制御(排他制御)するための様々なロックがあります。

 

明示的ロック(テーブルレベルロック、行レベルロック、ページレベルロック、デッドロック)

 

 

 

PostgreSQL シリーズ

今まで学習した PostgreSQL の技術をシリーズとしてまとめました。

 

【PostgreSQL】PostgreSQL の特徴と基本【Part.1】

 

【PostgreSQL】【正規化】リレーショナルデータベース(RDMS)の基本【Part.2】

 

【PostgreSQL】PostgreSQL のインストールと初期設定【Part.3】

 

【PostgreSQL】PostgreSQL の標準付属ツールの説明とコマンド手順【Part.4】

 

【PostgreSQL】PostgreSQL の設定ファイル(postgresql.conf、pg_hba.conf)の解説【Part.5】

 

【PostgreSQL】PostgreSQL のバックアップ手順とリストア手順【Part.6】

 

【PostgreSQL】PostgreSQL の運用管理(ユーザー管理、バキューム)【Part.7】

 

【PostgreSQL】PostgreSQL の基本的な SQL文 とオブジェクトについて【Part.8】

 

【PostgreSQL】PostgreSQL の組み込み関数、ユーザー定義関数、演算子について【Part.9】

 

【PostgreSQL】PostgreSQL のトランザクションについて【Part.10】

 

【PostgreSQL】SQL文【Part.11】

 

【PostgreSQL】テーブル設計(データ型、制約)【Part.12】

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください