[GRASS-user] strange Postgres/DBF table (layer 2) issue

Hi,

I am using GRASS6.3.0 on OpenSuse.

The following effects were encountered when attempting to deal with a second table for a vector layer:

After connecting to Postgres using
db.connect driver=pg database="host=localhost,dbname=postgres4grass"
and
db.login user=gis
the connection was verified from the GRASS side:

echo 'create table soils (cat integer, soiltype varchar(10) )' | db.execute
creates a table, just as intended.

Trouble starts when trying to connect a vector layer to an existing table:

  v.db.connect map=landkreise_alpha table=neo key=cat layer=2
The table <neo> is now part of vector map <landkreise_alpha> and may be
deleted or overwritten by GRASS modules
DBMI-Postgres driver error:
Cannot create index:
create unique index neo_cat on neo ( cat )
ERROR: must be owner of relation neo

  WARNING: Cannot create index
DBMI-Postgres driver error:
Cannot grant on table:
grant select on neo to public
ERROR: permission denied for relation neo

WARNING: Cannot grant privileges on table neo
Select privileges were granted on the table

There might be login-related issues: Since the table "neo" was set up in psql using the same account/role as is used when connecting from GRASS, how can such issues tracked down/verified ? Are there best practices/recipes known ?

Trying it from the other side by creating a new table by v.db.addtable also causes trouble:

v.db.addtable map=landkreise_alpha table=smith layer=2 'columns=cat integer,id_int integer,id_varchar varchar(10),name varchar(30)'

produces indeed a new table, but surprisingly NOT IN POSTGRES:

GRASS 6.3.0 (foo):~ > v.db.addtable map=landkreise_alpha table=smith layer=2 'columns=cat integer,id_int integer,id_varchar varchar(10),name varchar(30)'
Using user specified table name: smith
Creating table with columns (cat integer, id_int integer,id_varchar
varchar(10),name varchar(30))
The table <smith> is now part of vector map <landkreise_alpha> and may be
deleted or overwritten by GRASS modules
Select privileges were granted on the table
Updating database...
100%
1 categories read from map
0 records selected from table
0 categories read from map exist in selection from table
0 categories read from map don't exist in selection from table
0 records updated/inserted
0 update/insert errors
Current attribute table links:
Vector map <landkreise_alpha> is connected by:
layer <1> table <landkreise_alpha> in database </home/pel/sandbox/locations/alpha/dbf/> through driver <dbf> with key <cat>
layer <2> table <smith> in database </home/pel/sandbox/locations/alpha/dbf/> through driver <dbf> with key <cat>

^^^--- why, oh why is the new table set up through the dbf-Driver when the whole mapset has been switched to the PG-driver ?

Cheers,
Peter

FWIW: I noticed that login data is successively concatenated in the file .grasslogin6. Say, after loging in three times under three different user names, the file will contain three lines holding the three usernames and the associated passwords. Is this a bugfeature ?

--
Dr. Peter Löwe
<peter.loewe@gmx.de>

Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger

peter.loewe@gmx.de wrote:

Trying it from the other side by creating a new table by v.db.addtable
also causes trouble:

v.db.addtable map=landkreise_alpha table=smith layer=2 'columns=cat integer,id_int integer,id_varchar varchar(10),name varchar(30)'

produces indeed a new table, but surprisingly NOT IN POSTGRES:

GRASS 6.3.0 (foo):~ > v.db.addtable map=landkreise_alpha table=smith layer=2 'columns=cat integer,id_int integer,id_varchar varchar(10),name varchar(30)'
Using user specified table name: smith
Creating table with columns (cat integer, id_int integer,id_varchar
varchar(10),name varchar(30))
The table <smith> is now part of vector map <landkreise_alpha> and may be
deleted or overwritten by GRASS modules
Select privileges were granted on the table
Updating database...
100%
1 categories read from map
0 records selected from table
0 categories read from map exist in selection from table
0 categories read from map don't exist in selection from table
0 records updated/inserted
0 update/insert errors
Current attribute table links:
Vector map <landkreise_alpha> is connected by:
layer <1> table <landkreise_alpha> in database </home/pel/sandbox/locations/alpha/dbf/> through driver <dbf> with key <cat>
layer <2> table <smith> in database </home/pel/sandbox/locations/alpha/dbf/> through driver <dbf> with key <cat>

^^^--- why, oh why is the new table set up through the dbf-Driver
when the whole mapset has been switched to the PG-driver ?

If a table is connected to layer 1, v.db.addtable uses the same driver
and database parameters for the new table. It only uses the defaults
if no table is connected to layer 1.

I don't know whether this is because there is some problem with using
different database for different layers of the same map, or whether it
was a "feature" which seemed like a good idea at the time.

I suggest submitting an enhancement request (on the tracker) for a
switch to allow this behaviour to be overriden.

In the meantime, v.db.addtable is just a shell script; you can modify
it to skip the autodetection; see the "check if anything is connected"
comment for the relevant part of the script.

--
Glynn Clements <glynn@gclements.plus.com>