Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does "tuple (0,79)" in postgres log file mean when a deadlock happened?

In postgres log:

2016-12-23 15:28:14 +07 [17281-351 trns: 4280939, vtrns: 3/20] postgres@deadlocks HINT:  See server log for query details.
2016-12-23 15:28:14 +07 [17281-352 trns: 4280939, vtrns: 3/20] postgres@deadlocks CONTEXT:  while locking tuple (0,79) in relation "account"
2016-12-23 15:28:14 +07 [17281-353 trns: 4280939, vtrns: 3/20] postgres@deadlocks STATEMENT:  SELECT id FROM account where id=$1 for update;

when I provoke a deadlock I can see text: tuple (0,79).

As I know, a tuple just is several rows in table. But I don't understand what (0,79) means. I have only 2 rows in table account, it's just play and self-learning application.

So what does (0,79) means?

like image 388
Hayate Avatar asked Dec 23 '16 10:12

Hayate


1 Answers

This is the data type of the system column ctid. A tuple ID is a pair (block number, tuple index within block) that identifies the physical location of the row within its table.

read https://www.postgresql.org/docs/current/static/datatype-oid.html

It means block number 0, row index 79

also read http://rachbelaid.com/introduction-to-postgres-physical-storage/

also run SELECT id,ctid FROM account where id=$1 with right $1 to check out...

like image 109
Vao Tsun Avatar answered Oct 21 '22 21:10

Vao Tsun