在centos上创建postgresql数据库,创建支持postgis空间数据表,并导入mif数据流程

20180728更新
根据我们的idc机器配置,推荐版本如下

PostgreSQL 9.4.11 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.6 20110731 (Red Hat 4.
4.6-4), 64-bit
POSTGIS=”2.2.1 r14555″ GEOS=”3.6.1-CAPI-1.10.1 r0″ PROJ=”Rel. 4.7.1, 23 September 2009″ GDAL=”G
DAL 2.1.3, released 2017/20/01″ LIBXML=”2.7.6″ TOPOLOGY RASTER

各组件查询命令如下:

psql -V

gdalinfo –version

geos-config –version

proj

postgres和postgis的版本号需要进入到psql控制台

su

su – postgres

psql

postgres:select version();(需要进入到带postgis扩展的数据库中)

postgis:select PostGIS_full_version();

几个模块的关系

GDAL&OGR库支持了大多数地理数据格式的读写,OGR并没有对特征之间的空间关系计算提供原生支持。
Geos库扩展了OGR库的几何计算功能,为空间计算提供了接口。
PostGIS 则是PostgreSQL的一个扩展,目的是使PostgreSQL支持空间数据的存储和使用

1,安装postgresql数据库

直接安装9.0以上版本的比较方便,如果是从8.4升级,会有所麻烦,请参考下面链接
http://people.planetpostgresql.org/devrim/index.php?/archives/50-Upgrading-from-8.4-to-9.0-on-Fedora-Red-Hat-CentOS-using-RPMs.html#comments

进行操作

编译过程中如果有错误提示需要哪些库,要先安装缺失的库,查看Error内容可以得到

如果想迁移postgresql默认数据库的位置

采用

http://stackoverflow.com/questions/16678872/how-can-i-move-postgresql-data-to-another-directory-on-ubuntu-over-amazon-ec2

的方法建立软链接最为方便

完成后,调用

chown postgres:postgres /new/path/to/data

chmod 700 /new/path/to/data

如果不成功,那么chmod指向父级文件夹

chmod 700 /new/path/to

9.4直接安装方法

./configure
make
su
make install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su – postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test

2,安装ogr2ogr

安装ogr2ogr需要gdal,geos,等一系列库的支持,按照

https://github.com/wavded/ogre/wiki/Compiling-a-recent-ogr2ogr-from-source-on-CentOS-(RHEL)

按照文章开始的版本安装

20180730更新

安装gdal时必须安装对postgres的支持,默认不会安装,要不用ogr2ogr导入postgres数据库时会提示

ERROR 1: Unable to find driver `PostgreSQL’.

安装方法:指定pg_config文件

./configure –with-pg=/path/to/pg_config …
./make clean(重装必须先clean,第一次安装不需要)
./make
./make install

参考https://gis.stackexchange.com/questions/33346/how-can-i-update-ogr2ogr-to-include-the-postgresql-driver

20180727更新

安装geos

wget http://download.osgeo.org/geos/geos-3.6.2.tar.bz2
bunzip2 geos-3.6.2.tar.bz2
tar xvf geos-3.6.2.tar

cd geos-3.6.2

./configure && make && sudo make install
sudo ldconfig

3,安装postgis的支持

wget http://postgis.net/stuff/postgis-2.2.1dev.tar.gz

tar -xvzf postgis-2.2.1dev.tar.gz

tar xvfz postgis-2.2.1dev.tar.gz

cd postgis-2.2.1dev

./configure

make

make install

postgis2.2需要postgres9.1以上版本的支持,如果装的是8.4,先按照步骤1更新。如果是先更新的postgresql版本,然后再安装的postgis,会遇到pg_config的问题,需要将9.*版本的pg_config拷贝到/usr/bin/下面,原来8.4的pg_config先备份,因为编译程序需要调用pg_config找到一些头文件及库的位置

或者直接在configure的时候指定位置

./configure –with-pgconfig=/usr/pgsql-9.4/bin/pg_config

20180728更新

把pg_config拷贝到/usr/bin下,再configure,可能会提示

configure: error: the PGXS Makefile /usr/lib/pgxs/src/makefiles/pgxs.mk cannot be found. Please install the PostgreSQL server development packages and re-run configure.

需要改成./configure –with-pgconfig的方式,好像就没啥问题了

4,安装完postgis后,创建支持postgis的模板数据库template_postgis

命令行命令

su

su – postgres

psql

CREATE DATABASE template_postgis

WITH OWNER = postgres

ENCODING = ‘UTF8’

TABLESPACE = pg_default

TEMPLATE = template0

LC_COLLATE = ‘C’

LC_CTYPE = ‘C’

CONNECTION LIMIT = -1;

 

ALTER DATABASE template_postgis

SET search_path = “$user”, public, topology, tiger;

然后shell调用

psql -d template_postgis -c “CREATE EXTENSION postgis;”

psql -d template_postgis -c “CREATE EXTENSION postgis_topology;”

然后数据库内调用

template_postgis=> select version();

                          version

            ————————————————————-

             PostgreSQL 9.0.2, compiled by Visual C++ build 1500, 32-bit

            (1 行记录)

            –查看PostGIS的版本信息

           template_postgis=> select postgis_full_version();

                                        postgis_full_version

            ——————————————————————————–

            POSTGIS=”1.5.2″ GEOS=”3.2.2-CAPI-1.6.2″ PROJ=”Rel. 4.6.1, 21 August 2008″ LIBXML=”2.7.6″ USE_STATS

验证是否安装成功,出现以上信息,说明安装成功了,这样template_postgis就成为支持postgis的模板数据库了

5,今后需要创建支持 postgis数据库,就需要以template_postgis库为模板创建

6,通过ogr2ogr命令导入mif到数据库中

ogr2ogr -f “PostgreSQL” PG:”host=localhost dbname=15Q4_15M10W4_NAV2_MIFG_151023 user=postgres password=111111″ -overwrite /data4/upload/15Q4_15M10W4_NAV2_MIFG_151023/level2/anhui/road/Ranhui.mif

在导入之后检查表的结构,如果里面的有wkb_geometry geometry(Geometry,900914)这样的字段定义,而不是wkb_geometry bytea这样的字段定义,就代表导入成功了,否则就是还有问题。

20180805更新

近期将postgresql环境从idc A机器迁移到idc B机器,最后导入mif数据的时候发现速度特别慢,差了几十倍,两台机器测试过性能,磁盘和cpu的性能基本一致,但是查看系统占用发现B机器上的CUP占用总是很低,网上搜索到两篇文章和这个情况类似

SSL设置导致的问题:http://www.postgresql-archive.org/Low-CPU-Usage-td2065261.html

类型转换导致的问题:https://gis.stackexchange.com/questions/256716/ogr2ogr-slow-to-load-arcgis-file-geodatabase-data-into-postgresql

最后分别试验了都不行。AB机器上的postgresql及其插件完全一致,配置文件也一致。

后面查到根本原因是因为-skipfailures参数,When you use -skipfailures, the -gt parameter is ignored and virtually set to 1 so that transactions only take into account one single feature at a time.同样都使用了这个参数,在AB上表现差别很大,具体为什么原因还不清楚。

解决办法,加入参数,–config OGR_SQLITE_SYNCHRONOUS OFF

https://www.mail-archive.com/search?l=gdal-dev@lists.osgeo.org&q=subject:%22%5C%5Bgdal%5C-dev%5C%5D+Re%5C%3A+Slow+writing+into+Spatialite+with+%5C-skipfailures%22&o=newest&f=1

经验教训:如果能够确定两台机器的硬件环境和数据库环境完全一致,优先尝试调用程序的参数的修改会带来什么影响!

转载自:https://blog.csdn.net/wsndbd/article/details/81431235

You may also like...