테이블에 행 채우기

테이블에 행 채우기 (Populating a Table With Rows)

테이블을 만들었으니 이제 실제 데이터를 넣어 볼 차례예요. 테이블에 행(row)을 채우는 데 쓰는 명령은 INSERT예요. 지난 절에서 만든 weather 테이블에 행을 하나 넣어볼게요.

출처: PostgreSQL 공식 문서 — 2.4. Populating a Table With Rows

INSERT로 행 넣기

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

눈여겨볼 점이 몇 가지 있어요.

  • 모든 데이터 타입은 아주 직관적인 입력 형식을 사용해요. 간단한 숫자가 아닌 상수(상수값)는 보통 **작은따옴표(')**로 감싸야 해요. 위 예제에서 'San Francisco''1994-11-27'이 그렇죠.
  • date 타입은 사실 받아들일 수 있는 형식이 꽤 유연한데요, 이 튜토리얼에서는 헷갈림을 피하기 위해 위처럼 명확한 형식만 사용할게요.

point 타입은 좌표 쌍을 입력으로 받는데, 다음과 같이 쓰면 돼요.

INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');

컬럼을 명시해서 넣기

지금까지의 문법은 컬럼의 순서를 기억하고 있어야 한다는 단점이 있어요. 하지만 컬럼을 명시적으로 나열하는 방법도 있어요.

INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
    VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');

이렇게 하면 컬럼을 원하는 순서로 나열할 수도 있고, 일부 컬럼을 빼먹고 넣을 수도 있어요. 예를 들어 강수량을 모른다면 이렇게 넣으면 돼요.

INSERT INTO weather (date, city, temp_hi, temp_lo)
    VALUES ('1994-11-29', 'Hayward', 54, 37);

많은 개발자들은 순서에 의존하기보다 이렇게 컬럼을 명시적으로 나열하는 편이 더 좋은 스타일이라고 생각해요. 이유는 간단해요 — 나중에 컬럼이 추가돼도 헷갈릴 일이 없으니까요.

앞으로 나올 절에서 쓸 데이터가 필요하니, 위에 나온 INSERT 명령들을 모두 직접 입력해 두세요.

대량의 데이터는 COPY

아주 많은 양의 데이터를 평문(flat-text) 파일에서 불러와야 한다면 COPY 명령을 쓸 수도 있어요. COPY는 이 용도에 맞게 최적화되어 있어서 보통 더 빠르지만, INSERT보다는 유연성이 떨어져요.

COPY weather FROM '/home/user/weather.txt';

여기서 중요한 포인트! 소스 파일의 경로는 클라이언트가 아니라 백엔드(서버) 프로세스가 실행 중인 머신에 있어야 해요. 왜냐하면 백엔드 프로세스가 파일을 직접 읽기 때문이에요.

아까 위에서 weather 테이블에 넣은 데이터들은, 값이 탭 문자로 구분된 파일에서도 똑같이 넣을 수 있어요. 파일 내용은 이런 모양이에요.

San Francisco    46    50    0.25    1994-11-27
San Francisco    43    57    0.0    1994-11-29
Hayward    37    54    \N    1994-11-29

참고로 \N은 NULL을 뜻하는 표기예요. COPY 명령에 대한 더 자세한 내용은 공식 문서의 COPY 페이지에서 확인할 수 있어요.

더 알아보기 (Learn more)