[GRASSLIST:2307] Too many open files for pg driver
David Orme
d.orme at imperial.ac.uk
Wed Jan 21 09:37:26 EST 2004
Hi,
I'm using a script (see below) in grass57 to batch process 457 raster
files into polygon shapefiles via v.out.ogr. After a some of the files
(~80) have been processed successfully, I get the following error
message when v.out.ogr tries to write the shapefile.
> ERROR 4: Failed to open Shapefile
> `./Shapefiles/Vireo_flavifrons_9460.shp'.
>
> Too many open files: /usr/local/grass57/driver/db/
> ERROR: Cannot open driver pg
The script continues to run but no further shapefiles are exported. I
guess I must need to include a command to close connections to the
driver within the for loop - any suggestions?
Thanks,
David
> #!/bin/bash
>
> cd /Users/dorme/Work/ADHoC/America\ Breeding\ Atlas/
>
> # requires a PostgreSQL dtabase called NoAmAlbers
>
> if /usr/local/pgsql/bin/psql -l | grep -q "NoAmAlbers"
> then
> v.database driver=pg database=NoAmAlbers
>
> #check for output folder
> if ! ls | grep -q Shapefiles
> then
> mkdir ./Shapefiles
> fi
>
> for species in `g.mlist -r rast pattern='_[0-9]'`
> do
> # get vector file of areas where density >=0.5
> r.mapcalc "tmp=if($species>=0.5,1,null())"
> r.to.vect tmp output=$species feature=area
>
> # restructure table to shapefile format
> # clunky - substitute $species into .sql file using sed?
> echo "ALTER TABLE $species rename cat to id;" | db.execute
> echo "ALTER TABLE $species drop value;" | db.execute
> echo "ALTER TABLE $species drop label;" | db.execute
> echo "ALTER TABLE $species add sm_name varchar(50);" | db.execute
> echo "ALTER TABLE $species add sm_number int;" | db.execute
> echo "ALTER TABLE $species add date_ date;" | db.execute
> echo "ALTER TABLE $species add presence int;" | db.execute
> echo "ALTER TABLE $species add origin int;" | db.execute
> echo "ALTER TABLE $species add by_ varchar(4);" | db.execute
> echo "ALTER TABLE $species add source varchar(50);" | db.execute
> echo "ALTER TABLE $species add src_name varchar(50);" | db.execute
> echo "ALTER TABLE $species add Area double precision;" | db.execute
> echo "ALTER TABLE $species add Rest_rng integer;" | db.execute
> echo "ALTER TABLE $species add IUCN_thr varchar(5);" | db.execute
> echo "ALTER TABLE $species add Data_qual int;" | db.execute
> echo "ALTER TABLE $species add Data_type int;" | db.execute
> echo "ALTER TABLE $species add Island_ID varchar(50);" | db.execute
> echo "ALTER TABLE $species add Tax_cmnt varchar(50);" | db.execute
> echo "ALTER TABLE $species add Dist_cmnt varchar(50);" | db.execute
>
>
> # fill in table
> echo "UPDATE $species SET sm_name = '$species', sm_number = 1, date_
> ='today', presence=1, origin=1, by_ = 'DO',source = 'xyz (2003) #16',
> src_name = '$species';" | db.execute
>
> # reconnect the vector data to the modified table
> v.db.connect -o map=$species driver=pg database=NoAmAlbers
> table=$species key=id
>
> # dump the shapefile version
> v.out.ogr -c $species dsn=./Shapefiles layer=$species type=area
>
> # delete the temporary raste
> g.remove rast="tmp"
> done
> else
> echo "PostgreSQL database NoAmAlbers does not exist:"
> echo " - create using createdb NoAmAlbers"
> fi
More information about the grass-user
mailing list