Ответы:
Вы должны иметь возможность использовать функцию row_number () в качестве столбца в вашем представлении. Это работает для Postgres 8.4 или выше.
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
Это должно работать в большинстве баз данных, включая SQL Server, Oracle и MySQL.
row_number() OVER() AS "id"
без ORDER
более столбца
row_number
фактически это случайное значение. Вы не можете зависеть от того, чтобы он был непротиворечивым SELECT
, особенно когда меняются базовые данные.
Для более старых версий PostgreSQL (<= 8.3) здесь есть другое решение. В этом примере я использую другое имя столбца vid
для «view ID».
Сначала создайте последовательность. Используйте его, CYCLE
чтобы он зациклился, если вы достигнете конца последовательности.
CREATE SEQUENCE myview_vid_seq CYCLE;
Теперь создайте VIEW, который использует последовательность:
CREATE OR REPLACE VIEW myview AS
SELECT nextval('myview_vid_seq'::regclass) AS vid, mytable.*
FROM mytable;