Есть ли способ получить rowid записи в postgres??
В oracle я могу использовать как
SELECT MAX(BILLS.ROWID) FROM BILLS
Есть ли способ получить rowid записи в postgres??
В oracle я могу использовать как
SELECT MAX(BILLS.ROWID) FROM BILLS
Да, есть столбец ctid, который эквивалентен для rowid. Но это бесполезно для вас. 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). И не изменяйте его, создав триггер ДО ПЕРЕДАЧИ UPDATE, который вызовет исключение, если кто-то попытается обновить. Вы можете заполнить этот столбец последовательностью, как указано @JohnMudd.
SELECT MAX(ctid)
FROM table_name;