Respostas:
Você deve poder usar a função row_number () como uma coluna em sua exibição. Isso funciona para o Postgres 8.4 ou superior.
http://www.postgresql.org/docs/current/static/functions-window.html
SELECT * FROM
( SELECT
ROW_NUMBER() OVER (ORDER BY column_to_sort_by ASC) AS ROW_NUMBER,
Col1, Col2
FROM table_name
) myview_name
Isso deve funcionar na maioria dos bancos de dados, incluindo SQL Server, Oracle e MySQL.
row_number() OVER() AS "id"
sem ORDER
coluna sobre
row_number
é efetivamente um valor aleatório. Você não pode depender da consistência entre SELECT
s, principalmente quando os dados subjacentes são alterados.
Para versões mais antigas do PostgreSQL (<= 8.3), aqui está outra solução. Neste exemplo, eu uso outro nome de coluna vid
para "view ID".
Primeiro, crie uma sequência. Use CYCLE
para que ele faça um loop no caso de você chegar ao final da sequência.
CREATE SEQUENCE myview_vid_seq CYCLE;
Agora, crie uma VIEW que use a sequência:
CREATE OR REPLACE VIEW myview AS
SELECT nextval('myview_vid_seq'::regclass) AS vid, mytable.*
FROM mytable;