Rownum в postgresql

Есть ли способ имитировать rownum в postgresql?

Ответ 1

Postgresql > 8.4

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

Ответ 2

Я только что тестировал в Postgres 9.1 решение, близкое к Oracle ROWNUM:

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

Ответ 3

Если вы просто хотите, чтобы число возвращалось, попробуйте это.

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;

Возможно, не самый быстрый, но это вариант, если вам действительно нужны.

Ответ 4

Postgresql имеет предел.

Код Oracle:

select *
from
  tbl
where rownum <= 1000;

то же самое в коде Postgresql:

select *
from
  tbl
limit 1000

Ответ 5

Postgresql не имеет эквивалента Oracle ROWNUM. Во многих случаях вы можете добиться того же результата, используя LIMIT и OFFSET в своем запросе.

Ответ 6

используйте предел clausule, со смещением, чтобы выбрать номер строки -1, поэтому, если вы хотите получить строку с номером 8, используйте:

предел 1 смещение 7