2016-12-24 5 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 시간이나되었지만 업데이트 명령이 여전히 64GB RAM이 포함 된 서버에서 실행되고 있습니까?

답변

1

UPDATE 명령을 확인하십시오. 실제로 모든 레코드를 업데이트하므로 백만 개의 행을 말하면 모든 레코드가 업데이트됩니다. WHERE 조건을 사용하여 전체 테이블 레코드를 실제로 업데이트하지 않는 한 다음과 같이 속도를 빠르게하는 것이 좋습니다 (이 경우 해당 필터 열에 인덱스가있는 경우에도 인덱스를 사용합니다).

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

"lat_long"값 (현재 문자 변수로 표시됨)을 y 테이블 ..i.e의 각 행에 지리 정보로 삽입해야합니다. 나는 전체 테이블 레코드를 업데이트해야 할 것입니다. 위도, 경도를 테이블의 지형으로 삽입 할 수있는 다른 효율적인 방법이 있습니까 –

+0

모바일 : 배치 삽입을 사용할 수 있습니다 – Rahul

+0

감사합니다.하지만 어떻게 할 수 있습니까? 포스트그레스에서 지리 데이터 유형에 대한 일괄 삽입을 수행합니다. –