[GRASS-user] after performing join all character fields are
trunctated to 1
Micha Silver
micha at arava.co.il
Fri Mar 30 03:46:29 EDT 2012
On 03/28/2012 10:38 PM, Jennifer Boehnert wrote:
> Thank you Micha for the quick response. When I perform this join
> through the GUI on Windows I get the following error
>
> ERROR: value too long for type character (1)
Hi Jennifer:
Ahhh, I remember something about a bug in the v.db.join script.
The script first gets a list of columns from the join table, then loops
thru that list, creates a new column in the target table, and runs an
UPDATE to get all the values from the join table into the target. The
trouble comes with columns of type CHARACTER - the script does not check
the length of the field, so by default (in Postgresql) it creates a
field of length 1.
Here's from the PostgreSQL manual:
The notationsvarchar(n)andchar(n)are aliases forcharacter
varying(n)andcharacter(n), respectively.characterwithout length
specifier is equivalent tocharacter(1). Ifcharacter varyingis used
without length specifier, the type accepts strings of any size. The
latter is aPostgreSQLextension.
Since the script uses the column definition "CHARACTER" and not
"CHARACTER VARYING" the default length is 1.
Here's a way to work around the problem. Let's Suppose you have a target
vector called 'vect', and the join table called 'otable', your text
column is 'long_text', and the id columns for the join are 'cat' and
'oid', then
# first drop the wrong (length 1) text column
v.db.dropcol vect col=long_text
# Now recreate that column correctly
v.db.addcol vect col="long_text varchar(255)"
# And finally the update
echo "UPDATE vect SET long_text=(SELECT long_text
FROM otable
WHERE otable.oid=vect.cat);" | db.execute database=<your db> driver=pg
That's a one time fix. In order to get this working correctly
permanently, changes are required to the v.db.join script. I'll suggest
this to the devs.
Regards,
Micha
>
> and all my added fields which are of data type character have a length
> of 1 instead of the original 255. Any ideas what is going on? I am
> using postgreSQL 9.1 and GRASS 6.4.2 on Windows.
> Thanks Jennifer
>
>
> On 3/28/2012 12:56 PM, Micha Silver wrote:
>> On 03/28/2012 08:49 PM, Jennifer Boehnert wrote:
>>> Hello,
>>> I have performed a join between a vector map and a postgreSQL table
>>> using v.db.join. I would like to remove this join now. I cannot
>>> figure out how to do this.
>>
>> I think you can just drop the additional columns with v.db.dropcol.
>>
>>> Thank you Jennifer
>>>
>>> _______________________________________________
>>> grass-user mailing list
>>> grass-user at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/grass-user
>>>
>>> This mail was received via Mail-SeCure System.
>>>
>>>
>>
>>
>> --
>> Micha Silver
>> GIS Consultant, Arava Development Co.
>> http://www.surfaces.co.il
>>
>
--
Micha Silver
GIS Consultant, Arava Development Co.
http://www.surfaces.co.il
More information about the grass-user
mailing list