简短的回答:表的主键必须是 BIGINT 类型:
CREATE TABLE hydr(dt bigint primary key, value double, sensorid int);
在这种情况下,表是使用“dt”列组织的。这称为“聚集索引”。不支持 TIMESTAMP 数据类型,主要是因为它还包含纳秒。您可以做的是将 unix 时间戳(自 1970 年以来的毫秒数)存储为 BIGINT。
长答案:关于数据如何在 H2 内部存储的文档很差。我将在 H2 数据库的“性能”文档中添加以下部分。我希望这能解决问题(如果没有,请告诉我):
数据如何在内部存储
对于持久性数据库,如果创建表时使用类型为 BIGINT、INT、SMALLINT、TINYINT 的单列主键,则表的数据以这种方式组织。这有时也称为“聚集索引”或“索引组织表”。
H2 内部以 b 树的形式存储表数据和索引。每个 b 树将条目存储为唯一键(一或多列)和数据(零或多列)的列表。表数据始终以“数据 b 树”的形式组织,具有 long 类型的单个列键。如果创建表时指定了 BIGINT、INT、SMALLINT、TINYINT 类型的单列主键,则该列作为数据 b-tree 的键。如果没有指定主键,如果主键列是另一种数据类型,或者主键包含多于一列,则在表中添加一个 BIGINT 类型的隐藏自增列,用作数据 b 树的键。表的所有其他列都存储在此数据 b-tree 的数据区域内(大 BLOB、CLOB 列除外,
对于每个附加索引,都会创建一个新的“索引 b-tree”。这个 b-tree 的 key 由索引列和数据 b-tree 的 key 组成。如果主键是在插入数据后创建的,或者主键包含多列,或者主键不是上面列出的数据类型,则将主键存储在新的索引 b-tree 中。