我正在使用PostgreSQL与PostGIS和QGIS进行GIS用途,但我想我可能会在gis.stackexchange.com找到更多信息,因为我的问题与GIS没有直接关系。
我正在使用视图来随意显示数据,以满足用户的特定需求,例如他们可以访问数据库中的数据,但只需要他们需要的数据。我在视图中添加了一些规则,使它们在QGIS中“可更新”,并使用户直接“可操作”。
QGIS中的显示基于属性,但由于不同的人可能会在同一时刻访问相同的数据,他们可能希望根据需要显示和隐藏其中一些数据(地图打印为一旦)。所以我正在寻找一种方法来为每个视图提供特定的显示,我想在视图定义中添加一个“虚拟”列,例如像这样的布尔值:
CREATE VIEW view1 AS
SELECT oid, column1, True as display from table1;
但我希望我的用户能够更改此列的值,只是简单地从画布中显示或消除对象(考虑此参数时使用基于格式的样式)。显然它不起作用,因为更新会与视图的定义冲突。
有没有人知道如何实现这一目标?也许是物化视图(但我非常喜欢常规视图的动态)?
感谢。
答案 0 :(得分: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