2.3. 새 테이블 만들기

새 테이블은 다음과 같이 테이블의 이름과 그 테이블을 구성하는 각 칼럼과 그 칼럼의 자료형을 지정해서 만듭니다:

CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- low temperature
    temp_hi         int,           -- high temperature
    prcp            real,          -- precipitation
    date            date
);

psql 안에서는 하나의 SQL 명령이 여러 줄로 나뉘어져 있어도 되고, 한 줄로 모두 표현 되어도 상관 없습니다. 하지만, 하나의 명령은 반드시 세미콜론(;)으로 끝나야합니다.

SQL 문장을 작성할 때 공백문자(스페이스, 탭, 줄바꿈문자)들은 자유롭게 사용할 수 있습니다. 즉, 굳이 꼭 위와 같이 그대로 입력하지 않아도 됩니다. 한 줄로 길게 늘여 써도 상관 없습니다. 단지 주의할 것은 -- 문자는 주석을 표현하는 것인데, 이것이 있으면, 그 다음부터 줄 끝까지 무시됩니다. SQL 문법에서는 예약어(keyword, 명령이름, 구문 중간 중간에 나오는 on, default, not null 같은 것들)와 식별자(identifier, 테이블 이름, 칼럼 이름 같은 것들)의 대소문자를 구별하지 않습니다. 단지, 식별자가 큰따옴표(")로 둘러 쌓여지면, 그 식별자는 입력한 그대로의 대소문자를 유지합니다.

varchar(80) 이것은 최대길이가 80글자인 (주, byte가 아니라, '글자'입니다) 문자열을 저장할 수 있음을 나타내고, int 이것은 일반적인 정수형 숫자, real 이것은 소수점을 사용하는 숫자, date 이것은 말 그대로 날짜형을 나타냅니다. (윗 명령에서 처럼 칼럼 이름 date가 자료형 이름date와 같을 수도 있습니다. 이런 방식이 편하기도 하겠지만, 헷갈리기도 할 것입니다. 선택은 테이블 만드는 사람의 몫입니다.)

PostgreSQL에서는 표준 SQL 자료형인 int, smallint, real, double precision, char(N), varchar(N), date, time, timestamp, interval형을 사용할 수 있으며, 또한 일반적인 기타 자료형들과 지리 정보를 담기 위해서 사용되는 다양한 자료형을 사용할 수 있습니다. 또한 PostgreSQL에서는 사용자 정의 자료형을 만들 수 있습니다. 따라서 표준 SQL과의 호환성을 유지하기 위해서 특별히 문법적으로 예약어 기능을 해야하는 것들을 제외한 자료형 이름은 문법적인 예약어가 아닙니다. (주, 그래서, create table weather (...., data data); 같은 구문이 가능합니다)

다음 예제는 도시 이름과, 그 도시의 위치를 나타내는 지리정보를 담기위한 테이블을 만드는 것입니다:

CREATE TABLE cities (
    name            varchar(80),
    location        point
);

point 자료형은 PostgreSQL 고유 자료형입니다. (주, PostgreSQL 프로젝트의 시작이 테이블 상속과 지리정보를 담기 위한 것이였거든요)

끝으로, 더 이상 사용하지 않는 테이블을 삭제하거나, 똑 같은 이름의 테이블을 다른 구조로 다시 만들려면, 다음과 같은 명령을 사용합니다:

DROP TABLE 테이블이름;