반응형
관계형 데이터베이스는 MySQL, MariaDB 만 다뤘다 보니까 postgreSQL은 낯선 부분이 있다. 둘 다 관계형 데이터베이스라고는 하지만 살짝살짝은 달라서 이렇게 기록으로 남겨서 계속 참고하면서 일을 해야겠다 ㅠㅠ.
대소문자 구분을 해야하는 것을 잊지말자!
MySQL과의 PostgreSQL의 개념적인 차이점
- 테이블의 집합을 데이터베이스라는 개념으로 사용, 하지만 PostgreSQL에서는 테이블의 집합으로 데이터베이스와 스키마라는 두 개의 개념 사용
- PostgreSQL에서의 데이터베이스는 스키마의 상위 개념이며 또한 물리적인 집합인지 논리적인 집합인지의 차이도 가지고 있다.
- MySQL에서의 데이터베이스 개념은 PostgreSQL에서 스키마 개념과 유사하다.
- 그렇기 때문에 서로 다른 데이터베이스에 있는 테이블은 서로 join이 될 수 없다. 반면, 서로 다른 스키마의 테이블 간에는 JOIN이 가능하다.
- 한 세션은 무조건 하나의 데이터베이스에만 접속할 수 있다.
- 스키마를 별도로 지정하지 않았다면 public이라는 이름의 스키마를 기본으로 사용하게 된다.
- PostgreSQL 세션에서는 Search Path라는 것을 관리하는데, 이 값은 테이블을 어떤 스키마에서 찾아야 하는지를 설정하는 값이다. 만약, Admin이라는 스키마에서 테이블 목록을 조회하거나 쿼리를 실행하고 싶은데, 현재 세션의 Search Path에 Admin 스키마가 설정되어 있지 않다면 해당 작업은 실패된다.
- 동일 데이터베이스라도 스키마가 다르면 동일한 이름의 테이블이 존재할 수 있는데, 이때는 Search Path에 순서대로 테이블을 찾게 된다. 이런 경우 혼란의 소지가 될 수 있으므로 이름이 같은 테이블은 생성하지 않거나, 테이블 접근시 항상 스키마 이름을 붙여 주는 방법을 사용해야 한다.
데이터베이스 관련
- 데이터베이스 만들기 : 'CREATE DATABASE [DB명];'
- 데이터베이스 이름 변경 : 'ALTER DATABASE [기존 DB명] RENAME TO [바꿀 DB명];'
- 데이터베이스 삭제 : 'DROP DATABASE [DB명];'
SCHEMA 관련
스키마는 object들의 논리적인 집합이다. shcema는 table, view, sequence, synonym, domain, function등의 object들로 구성되어 있다. 스키마를 사용하는 이유는 논리적 집합체를 만들어서 관리의 편리성을 높이고 여러 User들 간의 간섭 없이 접속할 수 있게 해준다.
- 스키마 조회 : 명령어 '\dn' 입력 혹은 pgAdmin에서 확인 가능
- 스키마 생성 : 'CREATE SCHEMA [스키마이름]
TABLESPACE 관련
TABLESPACE는 PostgreSQL에서 DBA가 DATABASE object가 저장된 파일 시스템 장소를 정의할 수 있도록 하는 기능을 한다.
- 테이블 스페이스 조회 : 명령어 '\db' 입력 혹은 pgAdmin의 Object Browswer에서 검색할 수 있다.
- 테이블 스페이스 생성 : 'CREATE TABLESPACE [테이블스페이스이름]';
- 테이블 스페이스의 디렉토리를 설정할 때 USER가 디렉토리에 대한 권한을 가지고 있어야 한다. 먼저 directory를 생성하고 생성한 directory에 권한을 부여한다. => mkdir 'directory명' => chown user명.group명 'directory명'
- 'CREATE TABLESPACE DBSPACE LOCATION '/PostgreSQL';
- 테이블 스페이스 오너(OWNER) 설정 후 생성 : CREATE TABLE SPACE OWNER TEST2 => LOCATION 'C:\Program Files\PostgreSQL\9.4\data\TEST_1';
- 테이블 스페이스 이름 변경 : 'ALTER TABLESPACE [기존 TABLESPACE명] RENAME TO [바꿀 TABLESPACE명]'
- TABLESPACE 삭제 : 'DROP TABLESPACE [TABLESPACE명]'
Data Type
Name | Aliases | 설명 |
---|---|---|
Bigint | int8 | signed 8byte 정수형 |
Bigserial | serial8 | 자동증가 8byte 정수형 |
bit[(n)] | 고정길이 bit string | |
bit varying[(n)] | Varbit | 가변길이 bit string |
Boolean | Bool | Boolean연산 (true/false) |
Box | 평면 위의 직사각형 상자 | |
Bytea | 이진 data ("byte array") | |
character [(n)] | char[(n)] | 고정길이 character string |
character varying [(n)] | varchar[(n)] | 가변길이 character string |
Cidr | IPv4 or IPv6 network address | |
Circle | 평면 위의 면 | |
Date | 달력 날짜 (year, month, day) | |
double precision | float8 | double precision floating-point number (8bytes) |
Inet | IPv4, IPv6 host address | |
Integer | int, int4 | signed four-byte 정수형 |
interval [fields] [(p)] | time 구간 | |
Json | 문자 JSON data | |
Jsonb | 이진 JSON data, decomposed | |
Macaddr | MAC(Media Access Control) address | |
Money | 현금 총액 | |
pg_lsn | PostgreSQL Log 번호 | |
Real | float4 | single precision floating-point number |
Smallint | int2 | signed 2bytes 정수형 |
Smallserial | serial2 | 자동증가 2bytes 정수형 |
Serial | serial4 | 자동증가 4bytes 정수형 |
Text | 가변길이 character string | |
time [(p)] [without time zone] | time of day(no time zone) | |
time [(p)] with time zone | timetz | time of day, including time zone |
timestamp[(p)] [without time zone] | 날짜와 시간 (no time zone) | |
timestamp[(p)] with time zone | timestamptz | 날짜와 시간, including time zone |
Tsquery | text 검색 쿼리 | |
Tsvector | text 검색 문서 | |
Xml | XML data |
Reference : www.gurubee.net/postrgresql/basic
반응형
'개발 지식 > DB' 카테고리의 다른 글
[RDBMS] JOIN 기본 개념 (0) | 2020.02.16 |
---|---|
[PostgreSQL] 3개 테이블 조인 (0) | 2020.02.11 |
[PostgreSQL] 테이블 생성 및 레코드 INSERT SELECT (0) | 2020.01.21 |
[postgreSQL] 기본 사용법 (0) | 2020.01.16 |
[PostgreSQL] 설치 중 에러The database cluster initialisation failed. (2) | 2020.01.13 |