Postgresql 在Postgis中上传大量空间数据的好方法是什么?
我有大量的空间数据需要分析并在应用程序中使用。原始数据以WKT格式表示,我将其包装到INSERT SQL语句中以上载数据Postgresql 在Postgis中上传大量空间数据的好方法是什么?,postgresql,spatial,postgis,spatial-index,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万行)。 那么,
INSERT INTO sp_table ( ID_Info, "shape") VALUES ('California', , ST_GeomFromText('POLYGON((49153 4168, 49154 4168, 49155 4168, 49155 4167, 49153 4168))'));
但是,这种方法花费的时间太长,数据太大(1000万行)。
那么,有没有其他方法可以上传大量的空间数据呢
欢迎使用任何加速技巧 您可以找到一些一般的性能提示。可能您已经启用了属性,并且每个INSERT
命令都被强制物理写入硬盘,这就是为什么要花费这么多时间的原因
不建议关闭fsync(特别是在生产环境中),因为它允许您在意外操作系统崩溃后安全地恢复数据。根据文件:
因此,只建议关闭
fsync,如果您可以轻松地重新创建
从外部数据获取整个数据库
使用“复制”将文本文件插入表(具有适当的列) 如果此表没有串行主键,请将其添加到该表中 真空 每个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函数上运行
插入后创建要点索引。复制速度更快,所有提示都很好。禁用fsync可能导致损坏。