job*_*i88 16 postgresql postgresql-9.2
有没有办法在postgres中获得记录的rowid?
在oracle我可以使用喜欢
SELECT MAX(BILLS.ROWID) FROM BILLS
Run Code Online (Sandbox Code Playgroud)
bak*_*048 14
是的,有ctid列,相当于rowid.但对你来说没用.Rowid和ctid是物理行/元组标识符=>可以在重建/真空后更改.
PostgreSQL row_number() 窗口函数可用于大多数使用 rowid 的目的。在 Oracle 中 rowid 是结果数据行的固有编号,而在 Postgres row_number() 中计算返回数据的逻辑顺序内的编号。通常,如果您想对行进行编号,这意味着您希望它们按特定顺序排列,因此您可以在编号时指定哪些列对行进行排序:
select client_name, row_number() over (order by date) from bills;
Run Code Online (Sandbox Code Playgroud)
如果您只想对行进行任意编号,您可以将 over 子句留空:
select client_name, row_number() over () from bills;
Run Code Online (Sandbox Code Playgroud)
如果要计算行号的聚合,则必须使用子查询:
select max(rownum) from (
select row_number() over () as rownum from bills
) r;
Run Code Online (Sandbox Code Playgroud)
如果您只需要表中的最后一项,并且有一列要按顺序排序,则有一种比使用 row_number() 更简单的方法。只需颠倒排序顺序并选择第一项:
select * from bills
order by date desc limit 1;
Run Code Online (Sandbox Code Playgroud)