如何在视图中添加ROW_NUMBER()?

Kli*_*Max 7 sql postgresql row-number sql-view

在PostgreSQL 8.4中,我想从3个带id的表创建一个视图.所以我希望在我看来有这个结构:

num serial,
name_dispatcher character varying(250)
the_geom geometry
Run Code Online (Sandbox Code Playgroud)

我可以选择name_dispatcher,并the_geom从表:

 CREATE VIEW lineView
      AS SELECT 'name' AS name_dispatcher, the_geom
      FROM line1
      UNION
      SELECT 'name' AS name_dispatcher, the_geom
      FROM line2
      UNION
      SELECT 'name' AS name_dispatcher, the_geom
      FROM line3
Run Code Online (Sandbox Code Playgroud)

如何num在视图中创建列?

UPDATE

我找到了解决方案:

ROW_NUMBER() OVER(ORDER BY lineView.voltage)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用它ALTER VIEW.我怎么把它放在那里?

Erw*_*ter 9

您不能使用ALTER VIEW删除或添加列.我在ALTER VIEW上引用手册:

ALTER VIEW更改视图的各种辅助属性.(如果要修改视图的定义查询,请使用CREATE OR REPLACE VIEW.)

但简单的CREATE OR REPLACE VIEW不会削减它.手册的另一个引用:

新查询必须生成由现有视图查询生成的相同列

所以DROPCREATE观点:

DROP VIEW lineview;

CREATE VIEW lineview AS
SELECT *, row_number() OVER(ORDER BY ???) AS num
FROM (
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line1

   UNION
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line2

   UNION
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line3
   ) x
Run Code Online (Sandbox Code Playgroud)

我使用子查询因为我假设您要添加row_number()到所有行.在这方面你的问题含糊不清.
如果您只想要一个没有特定顺序的唯一ID,请使用row_number() OVER().