2011-06-12 65 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

相關問題