2016-12-24 138 views
0

我posgresql 9.6運行以下命令:更新緩慢命令

./bin/createdb testSpatial 
./bin/psql -d testSpatial -c "CREATE EXTENSION postgis;" 
create table test(name character varying(250), lat_long character varying(90250), the_geo geography); 
\copy test(name,lat_long) FROM 'test.csv' DELIMITERS E'\t' CSV HEADER; 
CREATE INDEX spatial_gist_index ON test USING gist (the_geo); 
UPDATE test SET the_geo = ST_GeogFromText('SRID=4326;'||lat_long); 

然而,似乎更新命令似乎對於包含百萬行的表進行運行下去。它已經過了14個小時,但更新命令仍然在包含64 GB RAM的服務器上運行?

回答

1

檢查你的UPDATE命令,實際上你正在更新所有記錄,因此如果你說一百萬行,那麼所有的記錄都被處理。您可能想要使用WHERE條件使其更快(在這種情況下,它也將使用該過濾器列中的任何索引),除非您確實要更新整個表記錄。

UPDATE test 
SET the_geo = ST_GeogFromText('SRID=4326;'||lat_long) 
WHERE id = <value>; 
+0

我需要在y table..i.e的每一行中插入「lat_long」值(當前作爲字符變量存在)作爲地理區域。我需要更新整個表格記錄......有沒有其他有效的方式可以將我(地理位置)插入表格(緯度,經度) –

+0

在移動設備上:您可以使用批量插入 – Rahul

+0

非常感謝,但是如何能夠我在postgres中爲geography數據類型進行批量插入 –