2011-06-12 44 views
2

我有大量需要在应用程序中分析和投入使用的空间数据。原始数据以WKT格式表示,并将其包装到INSERT SQL语句中以上载数据。在Postgis中上传大量空间数据的好方法是什么?

INSERT INTO sp_table (ID_Info, "shape") VALUES ('California', , ST_GeomFromText('POLYGON((49153 4168, 49154 4168, 49155 4168, 49155 4167, 49153 4168))')); 

但是,这种方法花费的时间太多,数据量很大(1000万行)。 那么,有没有其他的方式来上传大量的空间数据?

任何加速hacks &技巧,欢迎赞赏。

回答

1

使用COPY

插入文本文件为表(适当列)一个串行PRIMARY KEY加入这个表,如果它没有一个

真空

一个菌种process per CPU which does:

INSERT INTO sp_table (ID_Info, "shape") 
SELECT state_name, ST_GeomFromText(geom_as_text) 
FROM temp_table 
WHERE id % numbre_of_cpus = x 

对每个进程使用不同的“x”值,所以entir e表被处理。这将允许每个核心运行在较慢的ST_GeomFromText函数上。

插入后创建GIST索引。

+0

谢谢@peufeu。 – ablimit 2011-06-13 00:41:51

1

Here你可以找到一些一般的性能提示。可能你启用了fsync属性,并且每个INSERT命令都被强制物理写入硬盘,这就是为什么需要这么多时间。

不建议关闭fsync(特别是在生产环境中),因为它允许您在意外的操作系统崩溃后安全地恢复数据。据商务部:

因此它只是建议关闭 FSYNC,如果你可以很容易地重新从外部数据的 整个数据库。

+1

COPY速度更快,所有提示都很好。禁用fsync可能会导致损坏。 – jordani 2011-06-12 02:53:12

相关问题