导入单个tif文件
环境
系统: windows 8
数据库:PostgreSQL:9.6
gis版本:PostGIS: 2.4
单个文件大小: 530M
使用的raster2pgsql命令导入数据到PostgreSQL数据库
命令如下
(具体参数可自行查看命令的帮助文档)
文档:http://postgis.net/docs/using_raster_dataman.html
raster2pgsql -s 4326 -d -k -N -e -I -C -M "D:\dem\dem.tif" -F -t auto test | psql -U postgres -d dataBase -h localhost -p 5432 -W
需要说明的是:-t
参数指定了数据的分块大小,auto 自动计算Tile进行划分存储。-F
参数在关系表中增加名为filename的列用于保存原始文件的名称,这在批量导入进行Tile的合并的时候有用。
结果
在数据库中 可以看到
遇到的问题与原因
编码转换的问题
大文件的raster2pgsql加载失败,N字节的字符串对于编码转换而言太长? |
参考文档: http://postgis.net/docs/RT_FAQ.html#qa_raster_fails_encoding_conversion
https://trac.osgeo.org/postgis/ticket/2209
生成要加载的文件时,raster2pgsql不会与数据库建立任何连接。如果数据库设置的显式客户端编码与数据库编码不同,则在加载大型栅格文件(大小超过30 MB)时,您可能会遇到 例如,如果的数据库使用UTF8,但是通常情况下会发生这种情况,但是要支持Windows应用,必须将客户端编码设置为 要变通解决此问题,请确保客户端编码与加载期间的数据库编码相同。可以通过在加载脚本中显式设置编码来实现。例如,如果在Windows上: 如果您使用的是Unix / Linux |
导入时遇到内存溢出, ....内存 不足以ERROR 结束 失误回滚
我开始就认为这是一个内存问题,但是在看到“编码”一词和栅格文件的大小之后, 在网上搜了一通后,发现与PostgreSQL有关。raster2pgsql对客户端编码的数据库设置一无所知,因为它永远不会(永远!)接触数据库
在PostgreSQL的源代码中允许进行编码转换的最大大小为〜250 MB。
相关文档: https://doxygen.postgresql.org/memutils_8h_source.html