2014-10-31 3 views
0

필드가 원본 테이블에 존재하지 않으면 SERIAL 열을 기존보기에 추가 할 수 있습니까? NULL이 될 수없는 OID라는 자동 증분 ID 필드를 가져 오려고합니다.보기에 존재하지 않는 열 추가

CREATE OR REPLACE VIEW public.osm_polygon AS 

SELECT planet_osm_polygon.osm_id::text AS osm_id, 
    planet_osm_polygon.tags -> 'osm_timestamp'::text AS osm_timestamp, 
    planet_osm_polygon.tags -> 'name:en'::text AS name_en, 
    planet_osm_polygon.access, planet_osm_polygon.admin_level, 
    planet_osm_polygon.aerialway, planet_osm_polygon.aeroway, 
    planet_osm_polygon.amenity, planet_osm_polygon.area, 
    planet_osm_polygon.barrier, planet_osm_polygon.bicycle, 
    planet_osm_polygon.brand, planet_osm_polygon.bridge, way 
    planet_osm_polygon.boundary, planet_osm_polygon.building FROM planet_osm_polygon 
WHERE st_isvalid(planet_osm_polygon.way) AND planet_osm_polygon.way && st_makeenvelope((-17.5)::double precision, 3.0::double precision, 8.7::double precision, 26.9::double precision, 4326); 

그래서 내 견해입니다.

NULL이 될 수없는 긴 정수 또는 직렬로 자동 증가 필드가 포함 된 열을 추가해야합니다. 어떤 제안?

+0

'row_number()'는 어떻게 사용합니까? http://www.postgresql.org/docs/current/static/tutorial-window.html –

+0

기본 테이블에 열을 추가 한 다음 'VIEW'정의에 포함시킵니다. –

+0

'OID' 열을 호출하지 마십시오. 이것은 일반적으로 내부적으로 "객체 식별자"로 사용되며 특별히 처리됩니다. 사물을 혼동하지 마십시오. –

답변

1

row_number?

CREATE OR REPLACE VIEW public.osm_polygon AS 

SELECT planet_osm_polygon.osm_id::text AS osm_id, 
planet_osm_polygon.tags -> 'osm_timestamp'::text AS osm_timestamp, 
planet_osm_polygon.tags -> 'name:en'::text AS name_en, 
planet_osm_polygon.access, planet_osm_polygon.admin_level, 
planet_osm_polygon.aerialway, planet_osm_polygon.aeroway, 
planet_osm_polygon.amenity, planet_osm_polygon.area, 
planet_osm_polygon.barrier, planet_osm_polygon.bicycle, 
planet_osm_polygon.brand, planet_osm_polygon.bridge, way, 
planet_osm_polygon.boundary, planet_osm_polygon.building, 
row_number() over() as row_num 
FROM planet_osm_polygon 
WHERE st_isvalid(planet_osm_polygon.way) AND planet_osm_polygon.way && st_makeenvelope((-17.5)::double precision, 3.0::double precision, 8.7::double precision, 26.9::double precision, 4326); 
+1

'row_number()'에 어떤 종류의 순서를 추가해야합니다. 아마도'order by planet_osm_polygon.osm_id'일까요? 그렇지 않으면 다른 실행에 대해 다른 결과를 반환 할 수 있습니다. –

+1

@IgorRomanchenko : 일반적으로'row_number()'는 'order by'에 대해서만 의미가 있다고 동의합니다. 그러나보기에서 생성 된 숫자는 어쨌든 안정되지 않습니다. 행이 삭제되거나 기본 테이블에 삽입되었다고 생각하면됩니다. (실제 질문은 :'row_number()'가 조쉬에 충분할 정도로?) –

관련 문제