このリリースは 8.0.4 からの修正リリース(2005/12/12リリース)です。
以下に変更点をまとめます。各項目の末尾に適用されるバージョンを記載しております。本ドキュメントは PostgreSQL のリリースノート/HISTORY ファイルを元に作成しています。
オープンソースのリレーショナルデータベース管理システム (RDBMS) 。
問い合わせ言語に SQL を用い、標準 SQL の大部分とその他の先進的な機能をサポートする本格的なRDBMS。
このリリースは 8.0.4 からの修正リリース(2005/12/12リリース)です。
以下に変更点をまとめます。各項目の末尾に適用されるバージョンを記載しております。本ドキュメントは PostgreSQL のリリースノート/HISTORY ファイルを元に作成しています。
このリリースは 7.4.9 からの修正リリース(2005/12/12リリース)です。
以下に変更点をまとめます。各項目の末尾に適用されるバージョンを記載しております。本ドキュメントは PostgreSQL のリリースノート/HISTORY ファイルを元に作成しています。
このリリースは 7.3.11 からの修正リリース(2005/12/12リリース)です。
以下に変更点をまとめます。各項目の末尾に適用されるバージョンを記載しております。本ドキュメントは PostgreSQL のリリースノート/HISTORY ファイルを元に作成しています。
このリリースは PostgreSQL 8.1 (2005/11/08リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
続きを読む
PostgreSQL でユーザ定義関数を使うときのノートです。ユーザ定義関数でテーブルの更新処理を行い、同時に別のトランザクションが該当データの更新処理を行う場合に、ユーザ定義関数で直感とは異なるデータが参照される場合があります。
PL/pgSQL や C、SQL で作成したユーザ定義関数でこの現象が起きます。これは、SPIというサーバプログラム開発用インタフェースに起因するためです。
ユーザ定義関数 (f1) が下記となっている場合に注意する必要があります。
上記のユーザ定義関数 f1 を下記の状況で使った場合に注意が必要です。
ユーザ定義関数のサンプルです。
DROP TABLE t1; CREATE TABLE t1 (i int, j int); INSERT INTO t1 VALUES (1, 100); INSERT INTO t1 VALUES (2, 200); DROP FUNCTION f1(int, int); CREATE FUNCTION f1(int, int) RETURNS int AS ' DECLARE rec RECORD; key ALIAS FOR $1; value ALIAS FOR $2; BEGIN UPDATE t1 SET j = value WHERE i = key; -- f1 関数 a1 行目 FOR rec IN SELECT oid, ctid, xmin, xmax, cmin, cmax, i, j FROM t1 LOOP -- f1 関数 a2 行目 RAISE NOTICE ''oid % ctid % xmin % xmax % cmin % cmax % i % j %'', rec.oid, rec.ctid, rec.xmin, rec.xmax, rec.cmin, rec.cmax, rec.i, rec.j; END LOOP; RETURN 0; END; ' LANGUAGE 'plpgsql';
z1 と z2 は別のトランザクションです。
z1=# SELECT * FROM t1; i | j ---+----- 1 | 100 2 | 200 (2 rows) z1=# BEGIN; z1=# UPDATE t1 SET j = 111 WHERE i = 1; UPDATE 1 z2=# SELECT f1(1, 999); -- f1 関数 a1 行目で待ち状態 z1=# COMMIT;
待ち状態が解除された後の z2 の出力です。
NOTICE: oid 144530 ctid (0,1) xmin 23461 xmax 23466 cmin 23466 cmax 1 i 1 j 100 NOTICE: oid 144531 ctid (0,2) xmin 23462 xmax 0 cmin 0 cmax 0 i 2 j 200 NOTICE: oid 144530 ctid (0,4) xmin 23468 xmax 2 cmin 2 cmax 0 i 1 j 999 f1 ---- 0 (1 row)
ユーザ定義関数 f1 を使うトランザクションの ISOLATION LEVEL を SERIALIZABLE にします。具体的には、トランザクションの先頭 (BEGIN の直後) で下記のようにします。
z2=# BEGIN; z2=# SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; z2=# SELECT f1(1, 999);
ただし、SERIALIZABLE を使用できるか否かは、業務の仕様に依存します。業務の仕様上、SERIALIZABLE が利用できない場合は、ユーザ定義関数と同様の処理をフロントエンドプログラムから行ってください。フロントエンドプログラムを利用するとこの現象は起きません。
この現象は下記のバージョンで確認しました。
このリリースは PostgreSQL 8.0.4 (2005/10/04リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
続きを読む
このリリースは PostgreSQL 8.0.3 (2005/05/09リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
続きを読む
このリリースは PostgreSQL 8.0.2 (2005/04/07リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
続きを読む
このリリースは 7.2.6 からの修正リリース(2005/01/31リリース)です。
以下に変更点をまとめます。各項目の先頭に適用されるバージョンを記載しております。本ドキュメントは PostgreSQL のリリースノート/HISTORY ファイルを元に作成しています。
このリリースは PostgreSQL 8.0.1 (2005/01/31リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
続きを読む