[GRASS-user] pg driver and views (long)

Jarek Jasiewicz jarekj at amu.edu.pl
Sat Feb 10 05:41:10 EST 2007


Markus Neteler napisał(a):
> On Fri, Feb 09, 2007 at 06:59:06PM +0100, Jarek Jasiewicz wrote:
>   
>> Hi all
>> Tis is not a question, rather remark
>>
>> I experiment a little with using pg views with grass
>> generally grass can handle views via db.select and db.execute without 
>> problems and warnings
>>
>>
>> It is also possible to connect vetor file to view, and use attributes of 
>> view as a labels etc.. It also works in qgis
>> I add, the view is created from two joined tables!
>>
>>
>>     
>
> Please post the command to the list...
>
> thanks,
> markus 
>
>
>   
Hi

Here is the detail on what I worked (it is testing work for 
demonstration only)

1) I created two postgreSQL tables:

CREATE TABLE profile --data with 5 geological profiles
(
  cat int2,
  elev int2,
  CONSTRAINT profile_pkey PRIMARY KEY (cat)
)
WITHOUT OIDS;


CREATE TABLE samples --geological sampels in profiles (25 samples, 5 
samples for every profiles)
(
  id int4,
  pcat int2,
  depth float4,
  caco3 float4,
  res float4,
  sit float4,
  sio float4,
  loi float4
)
WITH OIDS;

2) Next I created simple vector point layer with five points, with cat 
values from 1 to 5, but without table
(it is my way, I rather prefare to create vector and join it with 
external table, than use grass form)

3) I created view with following definition. It is very simple view, but 
it can be expanded with, for example, WHERE cluase

CREATE OR REPLACE VIEW vinet AS 

 SELECT p.cat, avg(s.sit)::float4 AS sit

   FROM samples s

   JOIN profile p ON p.cat = s.pcat

  GROUP BY p.cat;


4) Nex I joined view to vector:

v.db.connect map=vinet driver=pg database=testy table=vinet key=cat layer=1 


nd I recived messages (my comments after //)

Table <vinet> does not exist in database <testy> //there is no table


The table <vinet> is now part of vector map <vinet> and may be deleted or overwritten by GRASS modules //table is, and is connected to vector

DBMI-Postgres driver error:

Cannot create index:

create unique index vinet_cat on vinet ( cat )

ERROR:  "vinet" is not a table //something is, but it is not a table


GRASS_INFO_WARNING(7111,3): Cannot create index


GRASS_INFO_WARNING(7111,4): Select privileges were granted on the table //but finally all is OK!



As You can see, grass mesages are contray eachother

5) For the end I tested it with :

v.what -a map=vinet east_north=496736.547013,535807.533363


And I recived, as I expected:

East: 496679.185592

North: 535864.894784

Map: vinet 

Mapset: widoki

Point

Layer: 1

Category: 2 

driver: pg

database: testy

table: vinet

key column: % //what that???????

cat : 2

sit : 25.44



Addationally:

v.surf.idw input=vinet output=result npoints=12 layer=1 column=sit


End I recived raster map as I expected.


It seems grass can handle postgreSQL views but "he" don't know about it?
So if it can handle views it shall also handle joins respectively?

regards
Jarek


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/grass-user/attachments/20070210/7b2285b0/attachment.html


More information about the grass-user mailing list