2016-12-23 1 views
4

В Postgres войти:Что означает «tuple (0,79)» в файле журнала postgres означает, что когда произошел тупик?

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

, когда я провоцирую в тупик, я могу видеть текст: tuple (0,79).

Как я знаю, кортеж просто несколько строк в таблице. Но я не понимаю, что означает (0,79). У меня всего 2 строки в таблице, это просто приложение для игры и самообучения.

И что же такое (0,79)?

+1

кортеж a ** single ** row, состоящий из нескольких столбцов. Таблица с двумя строками имеет два кортежа. –

ответ

4

Это тип данных системного столбца ctid. Идентификатор кортежа - это пара (номер блока, индекс кортежа внутри блока), который идентифицирует физическое местоположение строки в его таблице.

чтения https://www.postgresql.org/docs/current/static/datatype-oid.html

Это означает, что блок с номером 0, индекс строки 79

также читать http://rachbelaid.com/introduction-to-postgres-physical-storage/

также запустить SELECT id,ctid FROM account where id=$1 с правой $1 проверить ...

+0

Да, это можно найти в источниках postgres: https://github.com/postgres/postgres/blob/55c3391d1e6a201b5b891781d21fe682a8c64fe6/src/backend/storage/lmgr/lmgr.c#L725 – Hayate

Смежные вопросы