¿Cómo debo manejar los datos "clasificado x fuera de y" en PostgreSQL?

Tengo una tabla para la que me gustaría poder presentar datos de "clasificación X de Y". En particular, me gustaría poder presentar esos datos para una fila individual de una manera relativamente eficiente (es decir, sin seleccionar cada fila en la tabla). La clasificación en sí misma es bastante simple, es un ORDENAR POR PEDIDO en una sola columna en la tabla.

Postgres parece presentar algunos desafíos únicos en este sentido; AFAICT no tiene un RANK o ROW_NUMBER o función equivalente (al menos en 8.3, que por el momento estoy atascado). La respuesta canónica en los archivos de listas de correo parece ser crear una secuencia temporal y seleccionarla:

test=> create temporary sequence tmp_seq;
CREATE SEQUENCE
test=*> select nextval('tmp_seq') as row_number, col1, col2 from foo;

Parece que esta solución todavía no me ayudará cuando quiera seleccionar solo una fila de la tabla (y quiero seleccionarla por PK, no por rango).

Podría desnormalizar y almacenar el rango en una columna separada, lo que hace que la presentación de los datos sea trivial, pero simplemente reubica mi problema. ACTUALIZACIÓN no es compatible con ORDENAR POR, por lo que no estoy seguro de cómo construir una consulta de ACTUALIZACIÓN para establecer los rangos (aparte de seleccionar cada fila y ejecutar una ACTUALIZACIÓN por separado para cada fila, lo que parece una actividad demasiado grande de DB para disparar cada vez que los rangos necesitan actualizarse).

¿Me estoy perdiendo algo obvio? ¿Cuál es la forma correcta de hacer esto?

EDITAR: Aparentemente no estaba lo suficientemente claro. Soy consciente de OFFSET / LIMIT, pero no veo cómo ayuda a resolver este problema. No estoy tratando de seleccionar el ítem clasificado en el X lugar, estoy tratando de seleccionar un ítem arbitrario (por su PK, por ejemplo), y luego ser capaz de mostrarle al usuario algo así como "clasificado 43 de 312".

Respuestas a la pregunta(4)

Su respuesta a la pregunta