Rownum在postgresql中

有什么办法可以在postgresql中模拟rownum吗?

Postgresql> 8.4

SELECT row_number() OVER (ORDER BY col1) AS i, e.col1, e.col2, ... FROM ... 

我刚刚在Postgres 9.1中testing了一个接近Oracle ROWNUM的解决scheme:

 select row_number() over() as id, t.* from information_schema.tables t; 

如果你只是想要一个数字回来试试这个。

 create temp sequence temp_seq; SELECT inline_v1.ROWNUM,inline_v1.c1 FROM ( select nextval('temp_seq') as ROWNUM, c1 from sometable )inline_v1; 

您可以通过inline_v1 SQL添加一个订单,以便您的ROWNUM对您的数据具有一些连续的含义。

 select nextval('temp_seq') as ROWNUM, c1 from sometable ORDER BY c1 desc; 

可能不是最快的,但是如果你真的需要它,这是一个select。

Postgresql有限制。

Oracle的代码:

 select * from tbl where rownum <= 1000; 

同样在Postgresql的代码中:

 select * from tbl limit 1000 

Postgresql没有相当于Oracle的ROWNUM。 在许多情况下,您可以通过在查询中使用LIMIT和OFFSET来获得相同的结果。

使用限制clausule,与偏移量select行号-1,所以如果你想获得第8行所以使用:

限制1个偏移量7