2011-12-06 37 views
1

全部,將唯一約束添加到Postgresql視圖

是否有任何方法向Postgresql視圖添加唯一約束?

CREATE OR REPLACE VIEW export AS 
(SELECT nextval('export_view'::regclass)::integer AS pid, getdata.id, getdata.service, getdata.title, getdata.date_taken, getdata.date_inserted, getdata.url, 
    regexp_replace(getdata.description, E'[\\n\\r]+', ' ', 'g') AS description, getdata.geom 
    FROM getdata) 

我試過每一種組合都可以像regualr表一樣工作,但它仍然不能按需要工作。

感謝, 亞當

+0

從技術上講,pid和id都是獨一無二的,但我想pid將永遠是獨一無二的。 http://pastebin.com/1sznU09i <=我試圖加載一個視圖到桌面應用程序,它不喜歡我嘗試的任何東西。 – aeupinhere

回答

1

您可以編寫一個函數來檢查視圖所選數據的完整性。然後你可以在視圖中使用的任何表中添加一個after-trigger來調用你的函數。只要自制的完整性約束檢查器函數發現違規,觸發器就會引發異常來中止事務。

有了這個觸發器結構應該模擬視圖的約束,但也很脆弱。不幸的是,似乎沒有本地設施來爲視圖添加約束。

0

沒有意見了表包裝。你必須把約束放在桌子上。

+0

看起來像你的pastebin,你只需要在你的視圖輸出中包含一個唯一的id。如果你添加了一個rownum來看看你的軟件是否能接受這個結果呢?爲了好玩,創建視圖只需選擇1,'XYZ'UNION選擇2,'ABC';你的應用程序是那樣的嗎? – Kuberchaun