Database

[PostgreSQL] COPY

끊임없이 개발하는 새럼 2025. 6. 17. 11:20

PostgreSQL은 COPY 문법이 있어서 SAM 파일만 있다면 쉽게 이관이 가능합니다.

 

COPY 테이블명 (컬럼1, 컬럼2, ...)
FROM '/절대/경로/파일.csv'
WITH (
    FORMAT csv,
    DELIMITER ',',
    QUOTE '"',
    NULL '',
    HEADER true,
    ENCODING 'UTF8'
);

 

옵션 설명
FORMAT csv CSV 형식 지정 (또는 text)
DELIMITER 구분자 ex) , ;
QUOTE 문자열 감쌀 때 사용하는 기호
NULL NULL 처리할 문자열
HEADER 첫줄이 컬럼명이면 true, 바로 데이터면 false
ENCODING UTF8 등

 

* 주의사항

  1. data.csv 파일의 필드(데이터) 순서와 COPY 대상 테이블에 지정한 컬럼 순서가 정확히 일치해야 합니다.
  2. postgreSQL 의 서버가 접근이 가능한 파일일 경우 COPY를,  클라이언트 로컬 파일일 경우 \copy를 사용합니다.

 

저는 백그라운드로 실행해야 했기 때문에, 해당 sql문 파일을 만든 후 실행해 주었습니다.

nohup bin/psql -U user -d database -f import.sql > import.log 2>&1 &

 

 

* 번외

해당 SAM 파일이 원하는 형식이 아닐 경우, 명령어를 통해 수정합니다.

// , +32423 -> , 32423 으로 변경
sed -i 's/,+/,/g' data.csv
// 필드 첫번째에서 네번째만 남겨두고 자름
cut -d',' -f1-4 data.csv > data.csv_cut