sqlite rtree:约束失败(适用于普通表)

时间:2015-10-02 02:18:29

标签: sqlite r-tree

我正在尝试使用Rtree并面对这个奇怪的beheaviour:一个INSERT语句与普通表一起工作正常失败并带有rtree表:

这个例子很好用:

df1 <- structure(list(ID = 1:4, Measurement1 = c(45L, 34L, 23L, 56L), 
Measurement2 = c(104L, 87L, 99L, 67L)), .Names = c("ID", 
"Measurement1", "Measurement2"), class = "data.frame",
 row.names = c(NA, -4L))

df2 <-  structure(list(ID = c(2L, 4L), Measurement1 = c(10L, 21L),
 Measurement2 = c(11L, 
 22L)), .Names = c("ID", "Measurement1", "Measurement2"),
 class = "data.frame", row.names = c(NA, -2L))

这个失败了:

DROP TABLE IF EXISTS ltssoffsets;
CREATE  TABLE ltssoffsets(id TEXT NOT NULL, 
    offset_start INT NOT NULL,
    gene_start INT NOT NULL,
    chr TEXT NOT NULL, start INT, end INT,
    PRIMARY KEY (id, offset_start) );

INSERT INTO ltssoffsets VALUES("first", -10, 45, "chr2", 30, 40);
INSERT INTO ltssoffsets VALUES("first", -5, 45, "chr2", 30, 40);

这里有什么不妥?

1 个答案:

答案 0 :(得分:1)

虚拟表的行为与常规表不同。 如何处理列类型和约束取决于虚拟表实现。

R-tree documentation说:

  

SQLite R * Tree的第一列必须始终是整数主键。最小/最大值对列存储为32位浮点值[...]

您的R-tree表只有一个整数主键列id和四个坐标列。您的所有类型和约束都将被忽略。

R-tree应该用作索引,而不是用作表。

  

R * Tree索引存储的关于对象的唯一信息是其整数ID及其边界框。其他信息需要存储在单独的表中,并使用主键与R * Tree索引相关。