데이터베이스 생성 방법
PostgreSQL에서 데이터베이스를 생성하는 세 가지 주요 방식은 다음과 같습니다:
- SQL 명령어 사용:
CREATE DATABASE - 명령줄 도구 사용:
createdb - GUI 도구 사용: pgAdmin
예를 들어, psql 클라이언트를 통해 다음 명령을 실행하면 이름이 shulanxtdb인 데이터베이스가 생성됩니다.
postgres=# CREATE DATABASE shulanxtdb;
pgAdmin을 이용할 경우, 탐색기에서 데이터베이스 항목을 우클릭하고 "새 데이터베이스"를 선택해 간단히 생성할 수 있습니다.
데이터베이스 확인 및 연결
현재 존재하는 모든 데이터베이스 목록을 확인하려면 \l 명령을 사용합니다.
postgres=# \l
특정 데이터베이스에 연결하려면 \c 명령어를 사용합니다.
postgres=# \c test
데이터베이스 삭제
데이터베이스 삭제는 신중하게 수행해야 하며, 삭제된 데이터는 복구되지 않습니다. 삭제 방법은 아래와 같습니다:
DROP DATABASESQL 문 사용dropdb명령줄 도구 사용- pgAdmin에서 직접 삭제
DROP DATABASE의 구문은 다음과 같습니다:
DROP DATABASE [ IF EXISTS ] database_name;
IF EXISTS: 해당 데이터베이스가 존재하지 않아도 오류 없이 처리되며, 단순히 경고 메시지만 출력됩니다.
database_name: 삭제할 데이터베이스의 이름입니다.
예시:
postgres=# DROP DATABASE shulanxtdb;
테이블 생성
테이블을 생성하기 위한 기본 구문은 다음과 같습니다:
CREATE TABLE table_name (
column1 datatype CONSTRAINT,
column2 datatype CONSTRAINT,
...
PRIMARY KEY (column_list)
);
이 명령어는 현재 데이터베이스 내에 새로운 빈 테이블을 생성하며, 해당 테이블은 실행자에게 소유권이 부여됩니다.
예시: COMPANY라는 테이블을 생성하고, ID 컬럼을 기본키로 지정하며 NOT NULL 제약 조건을 적용합니다.
CREATE TABLE COMPANY (
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
생성된 테이블을 확인하려면 \d 명령어를 사용합니다.
shulanxtdb=# \d
특정 테이블의 스키마 정보를 보려면 \d table_name을 입력합니다.
shulanxtdb=# \d company
테이블 삭제
DROP TABLE 명령어는 테이블 자체뿐 아니라 관련된 인덱스, 규칙, 트리거 등도 모두 삭제합니다. 따라서 삭제 시 신중이 필요합니다.
기본 구문:
DROP TABLE table_name;
여러 테이블을 동시에 삭제할 수도 있습니다.
shulanxtdb=# DROP TABLE department, company;
스키마(Schema) 개념
스키마는 논리적 그룹으로, 하나의 데이터베이스 내에서 여러 개의 객체(테이블, 뷰, 인덱스, 함수 등)를 조직화하는 데 사용됩니다.
스키마의 장점:
- 다수의 사용자가 동일한 데이터베이스를 공유하면서 충돌 없이 작업 가능
- 객체들을 계층적으로 관리하여 구조화된 접근 제공
- 제3자 애플리케이션의 객체를 별도 스키마에 배치해 이름 충돌 방지
스키마는 디렉터리처럼 작동하지만, 중첩 구조는 지원하지 않습니다.
스키마 생성 예시
다음과 같이 myschema라는 스키마를 생성할 수 있습니다.
shulanxtdb=# CREATE SCHEMA myschema;
생성된 스키마 내에 테이블을 생성합니다.
shulanxtdb=# CREATE TABLE myschema.company (
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(25),
SALARY DECIMAL(18,2),
PRIMARY KEY (ID)
);
스키마 삭제
비어 있는 스키마 삭제:
DROP SCHEMA myschema;
스키마 내 모든 객체를 포함하여 강제 삭제:
DROP SCHEMA myschema CASCADE;