[pgpool-general-jp: 1307] Re: INSERTされたデータのシーケンス値がずれる
TED CBP Narita Takayoshi
narita.tk @ teldevice.co.jp
2014年 10月 21日 (火) 12:51:57 JST
お世話になります。成田です。
本件、pgpool-II 3.3.4 で試しましたが、同様の現象に陥ります。
以上、取り急ぎ報告まで。
-----Original Message-----
From: TED CBP Narita Takayoshi
Sent: Friday, October 17, 2014 5:54 PM
To: pgpool-general-jp @ sraoss.jp
Subject: INSERTされたデータのシーケンス値がずれる
お世話になります。成田と申します。
pgpool-II をレプリケーションモードで利用させていただいております。
さて、'ERROR: duplicate key value violates...'に陥るようなSQLを同時実行したときに
INSERTされたデータのシーケンス値がずれる動作を確認しました。
「環境」
pgpool-II: 3.1.12
PostgreSQL: 9.2.4
OS: CentOS 5.8
pgpool-IIの配下に2つのPostgreSQLバックエンドを置いてレプリケーションで利用(参考 pgpool.conf)
「再現方法」
スクリプト動作概要説明:
1. 'ERROR: duplicate key value violates...'に陥るようなSQLを同時実行
2. バックエンドの片側
から、対象テーブル(reptest)のシーケンス値を取得し、標準出力からDB内のテーブル(reptest_seqs)に書き出す
3. reptest_seqsの値をwhere句に指定してreptestを更新するupdate文をpgpool-II経由で実行するとpgpoolが不整合を検出
準備: seq_consistency.tar.gz を解凍後、seq_consistency 内に移動し、dbconfig の内容を環境に合わせて編集する。
実行: ./check_seq_value.bash
出力例:
DROP TABLE
psql:setupreptest.sql:2: NOTICE: CREATE TABLE will create implicit sequence "reptest_id_seq" for serial column "reptest.id"
psql:setupreptest.sql:2: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "reptest_pkey" for table "reptest"
CREATE TABLE
DROP TABLE
CREATE TABLE
INSERT 0 1
psql:reptest.sql:1: ERROR: duplicate key value violates unique constraint "reptest_pkey"
DETAIL: Key (b)=(1) already exists.
INSERT 0 1
psql:reptest.sql:1: ERROR: duplicate key value violates unique constraint "reptest_pkey"
DETAIL: Key (b)=(1) already exists.
psql:reptest.sql:2: ERROR: duplicate key value violates unique constraint "reptest_pkey"
DETAIL: Key (b)=(2) already exists.
psql:reptest.sql:2: ERROR: duplicate key value violates unique constraint "reptest_pkey"
DETAIL: Key (b)=(2) already exists.
psql:reptest.sql:1: ERROR: duplicate key value violates unique constraint "reptest_pkey"
DETAIL: Key (b)=(1) already exists.
INSERT 0 1
INSERT 0 1
INSERT 0 1
psql:reptest.sql:3: ERROR: duplicate key value violates unique constraint "reptest_pkey"
DETAIL: Key (b)=(3) already exists.
psql:reptest.sql:1: ERROR: duplicate key value violates unique constraint "reptest_pkey"
:
:
done.
ERROR: pgpool detected difference of the number of inserted, updated or deleted tuples. Possible last query was: "update reptest set c=id where id in (select id from reptest_seqs);"
HINT: check data consistency between master and other db node
「確認したい点」
動作の報告のみで恐縮ですが、この動作の原因について何か考えられる点は有りますでしょうか。
不足情報、スクリプト動作不備など有りましたらお知らせください。
#バージョン3.2,3.3ではまだ試しておりません。試したら報告致します。
以上、よろしくお願い申し上げます。
pgpool-general-jp メーリングリストの案内