2

我有大量空间数据需要分析并在应用程序中使用。原始数据以 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 万行)。那么,还有其他方法可以上传大量空间数据吗?

欢迎任何加速黑客和技巧。

4

2 回答 2

1

使用 COPY 将您的文本文件插入到表中(具有适当的列)

如果该表没有序列主键,则向该表添加一个 SERIAL PRIMARY KEY

真空

每个 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 索引。

于 2011-06-12T09:14:31.953 回答
1

在这里,您可以找到一些一般性能提示。可能您启用了fsyncINSERT属性,并且每个命令都被迫物理写入硬盘,这就是为什么需要这么多时间的原因。

不建议关闭 fsync(尤其是在生产环境中),因为它可以让您在意外的操作系统崩溃后安全地恢复数据。根据文档:

因此,仅当您可以轻松地从外部数据重新创建整个数据库时,才建议关闭 fsync。

于 2011-06-12T02:23:12.360 回答