[postgis-users] shp2pgsql -> pgsql2shp problem

Stephen Woodbridge woodbri at swoodbridge.com
Sat Oct 1 21:30:58 PDT 2005


Hi all,

I just tried to use shp2pgsql and pgsql2shp to rename some columns in 
Canadian hydrology shpfiles. I seems they named the original columns
"xxCART_" and "xxCART_ID" where xx is the province abbreviation. Each 
province's shapefile has different column names. So you can't build a 
mapserver tileindex. So I wrote the following bash script to use postgis 
to rename the columns:

mkdir ../p-new
for x in ab bc mb nb nf ns nt nu on pe qc sk yt ; do
y=${x}drcarto_p
echo $y
shp2pgsql -c -W LATIN1 $y $y | psql -U pgsql -h localhost temp > /dev/null
echo "alter table $y rename ${x}cart_ to cart_;" | psql -U pgsql -h 
localhost temp
echo "alter table $y rename ${x}cart_id to cart_id;" | psql -U pgsql -h 
localhost temp
(cd ../p-new ; pgsql2shp -f $y -u pgsql -h localhost -g the_geom temp $y )
echo "drop table $y;" | psql -U pgsql -h localhost temp
done

This works great EXCEPT the output column widths are not the same as the 
  input column widths. See below! Is there a way to force this to be the 
same? Why are they not the same as their sql definitions?

-Steve

woodbri at linus:/u/data/canada/hydro/p-new$ dbfdump -info abdrcarto_p
Filename:       abdrcarto_p.dbf
Version:        0x03 (ver. 3)
Num of records: 3165
Header length:  353
Record length:  180
Last change:    1995/7/26
Num fields:     10
Field info:
Num     Name            Type    Len     Decimal
1.      AREA            N       32      10
2.      PERIMETER       N       32      10
3.      CART_           N       16      0
4.      CART_ID         N       16      0
5.      F_CODE          C       5       0
6.      HYC             N       16      0
7.      CGNDB_EN        C       5       0
8.      CGNDB_FR        C       5       0
9.      NAME_EN         C       26      0
10.     NOM_FR          C       26      0
woodbri at linus:/u/data/canada/hydro/p-new$ dbfdump -info ../p/abdrcarto_p 

Filename:       ../p/abdrcarto_p.dbf
Version:        0x03 (ver. 3)
Num of records: 3165
Header length:  353
Record length:  261
Last change:    2003/6/20
Num fields:     10
Field info:
Num     Name            Type    Len     Decimal
1.      AREA            N       18      5
2.      PERIMETER       N       18      5
3.      ABCART_         N       11      0
4.      ABCART_ID       N       11      0
5.      F_CODE          C       5       0
6.      HYC             N       11      0
7.      CGNDB_EN        C       5       0
8.      CGNDB_FR        C       5       0
9.      NAME_EN         C       88      0
10.     NOM_FR          C       88      0



More information about the postgis-users mailing list