Friends,
This is a newbie question about working with the PostgresSql database driver and grass vector mapsets.
I am learning GRASS and Postgres, and not working on any particular project, although my next goal is to be able to use US Census data.
For now, I'm using spearfish data, with the example in the v.db.join manual page. I did migrate the mysoils mapset to a mapset that is connected to a PostGres DBMI. The instructions are mostly useful up to the join, where an error occurs.
The error text is at the end of this message.
The help that I seek is first, a reference to other tutorials that discuss joins and or layers, or for the patient, a quick look through my notes here and a reply with some good hints
to build a mapset to visualize categories of vector data.
Many thanks,
Katie Urey
Portland, Oregon US
------------------------------
some details about the error:
--------------------------
My System: Ubuntu 10:10
My Grass Version and Environment:
GRASS 6.4.1 (2011)
GISDBASE=/home/GrassWork
LOCATION_NAME=spearfish60
MAPSET=spearfish_pg
GRASS_DB_ENCODING=utf-8
MONITOR=cairo7
GRASS_GUI=wxpython
My database environment to setup a join: postgres:
VERSION = 'PostgreSQL 8.4.8 on i686-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5, 32-bit'
DBNAME = 'spearfish'
USER = 'katie'
PORT = '5432'
ENCODING = 'UTF8'
I start grass, and at the command line, connect to the database, confirm
:~ > db.tables -p driver=pg | grep -v info
public.soils_legend
:~ >v.db.connect -p map=mysoils_pg
Vector map <mysoils_pg@spearfish_pg> is connected by:
layer <1> table <public.mysoils_pg> in database <spearfish> through driver <pg> with key <cat>
:~ > v.db.join --v map=mysoils_pg column=label otable=public.soils_legend ocolumn=shortname
DBMI-Postgres driver error:
Cannot execute:
UPDATE public.mysoils_pg SET id=(SELECT id
FROM public.soils_legend WHERE public.soils_legend.shortname=public.mysoils_pg.label)
ERROR: value too long for type character(1)
ERROR: Error while executing: 'UPDATE public.mysoils_pg SET id=(SELECT id
FROM public.soils_legend WHERE
public.soils_legend.shortname=public.mysoils_pg.label)'
DBMI-Postgres driver error:
Cannot execute:
UPDATE public.mysoils_pg SET shortname=(SELECT shortname
FROM public.soils_legend WHERE public.soils_legend.shortname=public.mysoils_pg.label)
ERROR: value too long for type character(1)
ERROR: Error while executing: 'UPDATE public.mysoils_pg SET
shortname=(SELECT shortname
FROM public.soils_legend WHERE
public.soils_legend.shortname=public.mysoils_pg.label)'
DBMI-Postgres driver error:
Cannot execute:
UPDATE public.mysoils_pg SET longname=(SELECT longname
FROM public.soils_legend WHERE public.soils_legend.shortname=public.mysoils_pg.label)
ERROR: value too long for type character(1)
ERROR: Error while executing: 'UPDATE public.mysoils_pg SET
longname=(SELECT longname
FROM public.soils_legend WHERE
public.soils_legend.shortname=public.mysoils_pg.label)'
---- end of error---
No data is transferred, columns are setup with width=1.
~ > db.select mysoils_pg | head -3
cat|label|id|shortname|longname
1|Aab|||
2|Ba|||