Отказ от ответственности: теоретический вопрос.
Было задано несколько вопросов о том, как отличать вставленные и обновленные строки в инструкции PostgreSQL upsert.
Вот простой пример:
[email protected]=# create table t(i int primary key, x int);
[email protected]=# insert into t values(1,1);
[email protected]=# insert into t values(1,11),(2,22)
  on conflict(i) do update set x = excluded.i*11
  returning *, xmin, xmax;
╔═══╤════╤══════╤══════╗
║ i │ x  │ xmin │ xmax ║
╠═══╪════╪══════╪══════╣
║ 1 │ 11 │ 7696 │ 7696 ║
║ 2 │ 22 │ 7696 │    0 ║
╚═══╧════╧══════╧══════╝
Итак, xmax > 0 (или xmax= xmin) - строка обновлена; xmax= 0 - строка была вставлена.
IMO Непонятно объяснять значения столбцов xmin и xmax здесь.
Можно ли основывать логику на этих столбцах? Есть ли более существенное объяснение системных столбцов (кроме исходного кода)?
И, наконец, моя догадка о обновленных/вставленных строках?
