2017-06-08 32 views
0

我使用PostgreSQL作爲PostGIS和QGIS的GIS用途,但是我想我可能會在這裏找到更多的信息而不是gis.stackexchange.com,因爲我的問題與GIS沒有直接關係。PostgreSQL 9.5在視圖中更新虛擬列

我正在使用視圖來根據用戶的特定需求隨意地顯示數據,就像他們可以訪問數據庫中的數據一樣,但他們只需要它們。我在我的視圖中添加了一些規則,使它們在QGIS中「可更新」,並使它們直接由用戶「可操作」。

QGIS中的顯示是基於屬性的,但是由於不同的人有可能在同一時刻訪問相同的數據,他們可能希望根據他們的需要顯示和隱藏這些數據中的一部分(地圖打印一次)。所以,我正在尋找一種方式,讓可能有每個視圖特定的顯示,我想過乾脆在視圖定義中添加一個「虛擬」一欄,用例如布爾像這樣:

CREATE VIEW view1 AS 
SELECT oid, column1, True as display from table1; 

但我希望我的用戶能夠更改此列的值,以便簡單地在畫布上顯示或消除對象(使用考慮此參數的基於格式的樣式)。顯然,它不起作用,因爲更新會與視圖的定義相沖突。

有沒有人有任何想法如何實現這一目標?也許是物化的觀點(但我非常喜歡常規觀點的動態)?

謝謝。

+1

爲什麼不使用真實列代替。在原表 –

+0

@VaoTsun因爲我想要的屬性是特定於每個視圖,一個對象可以在許多視圖中(改變屬性一次就是在每個視圖中改變它)。 –

回答

1

如果從表格中讀取唯一ID字段(即,它不是通過QGIS中的空間視圖常用的row_number()技巧動態創建的),則可以創建一個可見性管理器表並在視圖中使用它。你可以通過查看一個表或者爲所有的查看一個表。類似的東西來:

create table visibility_manager (oid bigint, visibility_status boolean, viewname text); 


CREATE VIEW view1 AS 
SELECT table1.oid, column1, coalesce(visibility_status,true) as display 
    from table1 
    left outer join visibility_manager 
    on (table1.oid = visibility_manager.oid and visibility_manager.viewname = 'view1'); 

看到它在行動: http://rextester.com/OZPN1777

+0

哼哼...我喜歡它!謝謝。現在進行測試。 :) –

+0

測試,批准。再次感謝! –