2017-12-06 12 views
-1

は、私が何をしたいですPostgreSQLのトランザクションでコミットされていない書き込みコマンドの数を取得する方法は?ここ

BEGIN; 
INSERT INTO sample_table VALUES ('a','b') 
INSERT INTO sample_table VALUES ('c','d') 

どのように私がコミットする前に、トランザクション内のコマンドの数を得ることができますか?上記の例でコミットされていないコマンドの数は2

+0

どのようにsample_table VALUES( 'A'、 'B')、( 'C'、 'D')。INSERT INTO '数えます;'や 'INSERT INTO sample_table SELECT a、b FROM x; '?あなたは本当に何を達成しようとしていますか? – clemens

+0

私はキュー内のコマンドの数を数えたいだけです(トランザクションの開始後に挿入されたコマンドを挿入してください)。 –

+1

Postgresには「キュー」がありません。同時アクセスは[MVCC](https://en.wikipedia.org/wiki/Multiversion_concurrency_control)で処理されます。誰も保留中の変更の数をカウントしていません。あなたが本当に必要としているのであれば、あらゆるテーブルのすべてのレコードを掘り下げ、['xmin'](https://www.postgresql.org/docs/current/static/ddl-system- columns.html)を['txid_current()'](https://www.postgresql.org/docs/current/static/functions-info.html#idm46428705509888)と比較しますが、大規模なデータベースでは数分かかります時間。 –

答えて

2

です。制限はありません。can usecmin +1の式です。もちろん、挿入するすべてのテーブルを知っている必要があります。私のデモでは、私は挿入だけでそれを行う方法を示しています、更新と削除は、とにかく、試してみるためにコードをxmaxを含むもっと多くのロジックが必要になります...

サンプル:

t=# create table ut1(i int); 
CREATE TABLE 
t=# create table ut2(i int); 
CREATE TABLE 
t=# insert into ut1 select generate_series(1,10); 
INSERT 0 10 
t=# insert into ut2 select generate_series(1,10); 
INSERT 0 10 

デモ:

t=# begin; 
BEGIN 
t=# insert into ut1 select 1; 
INSERT 0 1 
t=# insert into ut2 select 1; 
INSERT 0 1 
t=# insert into ut2 select generate_series(1,2); 
INSERT 0 2 
t=# insert into ut1 select generate_series(1,2); 
INSERT 0 2 
t=# select greatest(max(ut1.cmin::text::int),max(ut2.cmin::text::int)) from ut2 join ut1 on ut1.xmin = ut2.xmin and (ut1.xmin)::text::bigint = txid_current(); 
greatest 
---------- 
     3 
(1 row) 

t=# end; 
COMMIT 
t=# begin; 
BEGIN 
t=# insert into ut1 select generate_series(1,2); 
INSERT 0 2 
t=# insert into ut2 select generate_series(1,2); 
INSERT 0 2 
t=# select greatest(max(ut1.cmin::text::int),max(ut2.cmin::text::int)) from ut2 join ut1 on ut1.xmin = ut2.xmin and (ut1.xmin)::text::bigint = txid_current(); 
greatest 
---------- 
     1 
(1 row) 

t=# end; 
COMMIT 
関連する問題