2017-06-08 16 views
0

私はPostGISとQGISでGISの目的でPostgreSQLを使用していますが、gis.stackexchange.comより多くの情報がここにあります。私の質問は直接GISに関連していないからです。PostgreSQL 9.5 Update仮想カラムの表示

私は、データベースにあるようにデータにアクセスできるように、必要なものだけで、ユーザーの特定のニーズに合わせて自由にデータを表示するためにビューを使用しています。 QGISで「更新可能」にして、ユーザが直接「実行可能」にするために、ビューにいくつかのルールを追加しました。

QGISの表示は属性に基づいていますが、異なる人物が同時に同じデータにアクセスする可能性があるため、必要に応じてこれらのデータの一部を表示および非表示にすることができます一度)。だから私は、ビューごとに固有のディスプレイを持っている可能性を与えるための方法を探しています、と私は単純なようブールたとえばで、ビュー定義では、「仮想」の列を追加する方法について考えた:

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

しかし、私は、ユーザーがこの列の値を変更してキャンバスからオブジェクトを表示または消滅させることができるようにしたいと考えています(このパラメーターを考慮したベーススタイリング)。そして、更新がビューの定義と矛盾しているので、明らかにdirecltyは機能しません。

これを達成する方法を知っている人はいますか?多分、マテリアライズド・ビュー(しかし、私はかなり普通のビューのダイナミクスが好きです)?

ありがとうございました。

+1

代わりに、実際のカラムを使用していない理由は...元のテーブルに –

+0

@VaoTsunを私は属性が各ビューに特異的であることがしたいので、とオブジェクトは多くのビューに存在することができます(属性を変更すると、ビューごとに変更されます)。 –

答えて

1

テーブルから一意のIDフィールドを読み取った場合(つまり、QGISの空間ビューでよく使用されるrow_number()トリックによって動的に作成されない場合)、可視性マネージャーテーブルを作成してビューで使用できます。ビューごとに1つのテーブルを持つことも、すべてのテーブルを1つずつ持つこともできます。

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

Hum ...私はそれが好きです!ありがとうございました。今すぐテストしてください。 :) –

+0

テスト済みで、承認済みです。再度、感謝します! –

関連する問題