在Postgis中上传大量空间数据的好方法是什么?

时间:2011-06-12 01:01:01

标签: postgresql spatial postgis spatial-index

我需要分析并在应用程序中使用大量空间数据。原始数据以WKT格式表示,我将其包装到INSERT SQL语句中以上传数据。

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

然而,这种方法耗费了太多时间,而且数据量很大(1000万行)。 那么,还有其他方法可以上传大量的空间数据吗?

任何加速黑客攻击我们欢迎各种技巧。

2 个答案:

答案 0 :(得分:1)

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

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

  

因此,建议关闭   fsync如果你可以轻松地重新创建你的   来自外部数据的整个数据库。

答案 1 :(得分:1)

使用COPY

将文本文件插入表格(具有适当的列)

如果没有一个

,请在此表中添加一个SERIAL PRIMARY KEY

VACUUM

每个CPU产生一个进程,执行此操作:

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”值,以便处理整个表。这将允许每个核心在慢速ST_GeomFromText函数上运行。

插入后创建GIST索引。