PostgreSQL是否有类似Oracle ROWNUM的列序列号生成函数?
PostgreSQL 等效Oracle ROWNUM的实现方式
PostgreSQL没有内置和Oracle ROWNUM 同名的伪列,但可以用标准窗口函数 row_number() 实现完全一致的连续序列号生成效果。
对应参考代码的改写方案
你给出的Oracle代码:
TO_CHAR(ROWNUM) AS "TransactionID"
在PostgreSQL中可以直接改写为:
TO_CHAR(row_number() OVER ()) AS "TransactionID"
补充使用说明
- 如果需要先对结果排序再生成序号,只需在
OVER的括号内添加ORDER BY子句即可,示例:-- 按创建时间升序排序后生成序列号 TO_CHAR(row_number() OVER (ORDER BY create_time ASC)) AS "TransactionID" - 如果有分组生成独立序列号的需求,还可以添加
PARTITION BY子句实现按组内排序生成连续序号,属于Oracle原生ROWNUM不具备的扩展能力。 - 如果要实现Oracle中
WHERE ROWNUM < N的取前N条的分页需求,PostgreSQL更推荐直接使用LIMIT N语法,执行效率更高、写法更简洁。
内容的提问来源于stack exchange,提问作者Shalini
相关产品推荐
相关产品推荐

