我正在尝试使用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);
这里有什么不妥?
答案 0 :(得分:1)
虚拟表的行为与常规表不同。 如何处理列类型和约束取决于虚拟表实现。
SQLite R * Tree的第一列必须始终是整数主键。最小/最大值对列存储为32位浮点值[...]
您的R-tree表只有一个整数主键列id
和四个坐标列。您的所有类型和约束都将被忽略。
R-tree应该用作索引,而不是用作表。
R * Tree索引存储的关于对象的唯一信息是其整数ID及其边界框。其他信息需要存储在单独的表中,并使用主键与R * Tree索引相关。