簡體   English   中英

具有行版本控制的PostgreSQL數據庫

[英]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

所以我猜了兩個問題:

  1. 您將如何為此編寫查詢?
  2. 可以索引嗎?

一個更大的,更多的元問題是,是否存在一種更好的方法來存儲此類信息。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM