[英]PostgreSQL database with row versioning
只是想從對StackOverflow社區說很多愛開始:)
所以我有一個Postgres數據庫表,但讓我們簡化為重要的列:
id (string/int), when (timestamp/time/date), canonical (boolean)
在這種情況下, 規范表示“接受版本歷史記錄的一部分”。
假設我們的表格如下所示:
2, 2003-01-08, true
2, 2002-01-08, false
1, 2001-01-08, false
3, 2000-01-08, false
2, 2000-01-08, true
1, 2000-01-08, true
1, 1999-01-08, true
我想要一個查詢,以查找每個ID的最新規范版本 。 結果應如下所示:
2, 2003-01-08, true
1, 2000-01-08, true
所以我猜了兩個問題:
一個更大的,更多的元問題是,是否存在一種更好的方法來存儲此類信息。
select distinct on (id) *
from t
where canonical
order by id, "when" desc
此查詢的最佳索引是部分索引
create index index_name on t (id, "when" desc) where canonical;
http://www.postgresql.org/docs/current/static/sql-createindex.html
select id, max("when")
from t
where canonical
group by id;
在某些情況下, 可能比不distinct on
變體更快 ,並且您不需要按id
對結果進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.