Incorrect accounting (n_tup_ins) of non-inserted rows

From: Ilya Matveychikov <matvejchikov(at)gmail(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Incorrect accounting (n_tup_ins) of non-inserted rows
Date: 2016-03-18 09:54:20
Message-ID: CAKh5nabvJBwQaXAMJ833zzY6dDBv4UZJwddhKzEt7wCKh+g_BA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hello,

Seems that accounting of insertions with `n_tup_ins` not correct in
case of insertion errors cause by constraints checking (duplicate key
value violates unique constraint):

EXAMPLE:

postgres=# create table t(name text unique);
CREATE TABLE
postgres=# SELECT n_tup_ins FROM pg_stat_user_tables WHERE relname='t';
n_tup_ins
-----------
0

postgres=# insert into t(name) values('a');
INSERT 0 1
postgres=# SELECT n_tup_ins FROM pg_stat_user_tables WHERE relname='t';
n_tup_ins
-----------
1

postgres=# insert into t(name) values('b');
INSERT 0 1
postgres=# SELECT n_tup_ins FROM pg_stat_user_tables WHERE relname='t';
n_tup_ins
-----------
2

postgres=# insert into t(name) values('a');
ERROR: duplicate key value violates unique constraint "t_name_key"
DETAIL: Key (name)=(a) already exists.
postgres=# SELECT n_tup_ins FROM pg_stat_user_tables WHERE relname='t';
n_tup_ins
-----------
3

name
------
a
b

CODE REFERENCE (src/backend/postmaster/pgstat.c)

/* count attempted actions regardless of commit/abort */
tabstat->t_counts.t_tuples_inserted += trans->tuples_inserted;
tabstat->t_counts.t_tuples_updated += trans->tuples_updated;
tabstat->t_counts.t_tuples_deleted += trans->tuples_deleted;

So, is this behavior normal or probably needs to be fixed?

--
Ilya Matveychikov

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message ruslan.zakirov 2016-03-18 10:04:27 BUG #14032: trigram index is not used for '=' operator
Previous Message Dmitriy Sarafannikov 2016-03-18 08:12:44 Re: Too many files in pg_replslot folder