有什么方法可以在 postgres 中获取记录的 rowid 吗?
在甲骨文我可以使用喜欢
SELECT MAX(BILLS.ROWID) FROM BILLS
有什么方法可以在 postgres 中获取记录的 rowid 吗?
在甲骨文我可以使用喜欢
SELECT MAX(BILLS.ROWID) FROM BILLS
是的,有与 rowid 等效的 ctid 列。但是对你没用。Rowid 和 ctid 是物理行/元组标识符 => 可以在重建/清理后更改。
PostgreSQL row_number() 窗口函数可用于大多数使用 rowid 的目的。而在 Oracle 中,rowid 是结果数据行的固有编号,而在 Postgres 中 row_number() 计算返回数据的逻辑顺序内的编号。通常,如果您想对行进行编号,则意味着您希望它们按特定顺序排列,因此您可以在对行进行编号时指定对行进行排序:
select client_name, row_number() over (order by date) from bills;
如果您只是想要任意编号的行,您可以将 over 子句留空:
select client_name, row_number() over () from bills;
如果要计算行号的聚合,则必须使用子查询:
select max(rownum) from (
select row_number() over () as rownum from bills
) r;
如果您只需要表中的最后一项,并且有一列要按顺序排序,那么有一种比使用 row_number() 更简单的方法。只需反转排序顺序并选择第一项:
select * from bills
order by date desc limit 1;
使用序列。您可以选择 4 或 8 字节值。
将任何唯一列添加到您的表中(名称可能为 rowid)。并通过创建 BEFORE UPDATE 触发器来防止更改它,如果有人尝试更新,它将引发异常。您可以使用@JohnMudd 提到的序列填充此列。