เมื่อฉันสร้างมุมมองใน PostGIS มีวิธีใดที่จะเพิ่ม ID เฉพาะลงในมุมมองนั้น เช่นเดียวกับฟิลด์ "gid" ในตาราง PostGIS อื่น ๆ
แก้ไข:ขออภัยฉันควรรวมไว้ในโพสต์ต้นฉบับ ฉันใช้ PostGresql 9.0 และ PostGIS 1.5
Ando
เมื่อฉันสร้างมุมมองใน PostGIS มีวิธีใดที่จะเพิ่ม ID เฉพาะลงในมุมมองนั้น เช่นเดียวกับฟิลด์ "gid" ในตาราง PostGIS อื่น ๆ
แก้ไข:ขออภัยฉันควรรวมไว้ในโพสต์ต้นฉบับ ฉันใช้ PostGresql 9.0 และ PostGIS 1.5
Ando
คำตอบ:
คุณควรใช้ฟังก์ชัน 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
สำหรับ "ดู ID"
ขั้นแรกสร้างลำดับ ใช้CYCLE
เพื่อที่จะวนซ้ำในกรณีที่คุณไปถึงจุดสิ้นสุดของลำดับ
CREATE SEQUENCE myview_vid_seq CYCLE;
ตอนนี้สร้างมุมมองที่ใช้ลำดับ:
CREATE OR REPLACE VIEW myview AS
SELECT nextval('myview_vid_seq'::regclass) AS vid, mytable.*
FROM mytable;