>데이터 베이스 >MySQL 튜토리얼 >CSV 파일에서 Postgres 테이블의 행을 효율적으로 업데이트하려면 어떻게 해야 합니까?

CSV 파일에서 Postgres 테이블의 행을 효율적으로 업데이트하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-15 08:29:45289검색

How Can I Efficiently Update Rows in a Postgres Table from a CSV File?

CSV 데이터로 Postgres 업데이트 최적화

CSV 파일의 데이터로 Postgres 테이블을 효율적으로 업데이트하는 것은 데이터 관리에 매우 중요합니다. 테이블(id, 바나나, 사과)과 업데이트된 banana 값이 포함된 CSV 파일이 있다고 가정해 보겠습니다. 문제는 banana 열을 수정하지 않고 apple 열만 업데이트하는 것입니다.

효율적인 업데이트를 위해 COPYUPDATE 활용

최적의 접근 방식은 COPY을 사용하여 CSV를 임시 테이블로 가져온 다음 UPDATE 열을 기반으로 id을 수행하는 것입니다. 과정은 다음과 같습니다.

<code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text); -- Or see alternative below

COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);

UPDATE tbl
SET banana = tmp_x.banana
FROM tmp_x
WHERE tbl.id = tmp_x.id;

DROP TABLE tmp_x; -- Alternatively, it's automatically dropped at the end of the session</code>

임시 테이블 구조가 대상 테이블을 미러링할 때 더욱 효율적인 접근 방식:

<code class="language-sql">CREATE TEMP TABLE tmp_x AS SELECT * FROM tbl LIMIT 0;</code>

tbl과 동일한 스키마를 사용하여 제약 조건을 생략하고 빈 임시 테이블을 생성합니다.

보안 및 성능 고려 사항

Postgres 11 이전에는 COPY 슈퍼유저 권한이 필요했습니다. 그러나 Postgres 11 이상 버전에서는 향상된 보안을 위해 사전 정의된 역할(예: pg_read_server_filespg_write_server_files)을 제공합니다.

psql 메타 명령 copyCOPY 명령을 로컬로 실행하여 수퍼유저 권한 요구 사항을 우회하는 또 다른 솔루션을 제공합니다.

대용량 CSV 파일의 경우 성능 최적화가 중요합니다. temp_buffers 매개변수를 일시적으로 늘려보세요. 임시 테이블의 id 컬럼에 인덱스를 생성하고 ANALYZE을 실행하면 쿼리 속도를 더욱 향상시킬 수 있습니다.

위 내용은 CSV 파일에서 Postgres 테이블의 행을 효율적으로 업데이트하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.