PostgreSQL 설정하기

may_soouu·2020년 11월 26일
3
post-thumbnail

postgreSQL

PostgreSQL은 데이터베이스에 위치 정보, 거리 정보, 도형 정보 등을 저장하고 연산하기 위해 버클리 대학에서 1975년 Ingres 프로젝트를 시작으로 1991년 Postgres 버전3 출시, 이후 PostgreSQL 프로젝트로 변경되어 15년 넘게 꾸준히 개발되고 있는 오픈 소스 SW 데이터베이스 이다.

1. PostgreSQL 다운받기

홈페이지에서 다운 받지 않고 homebrew를 통해서 다운 받았다.

brew install postgresql

# 버전 확인
psql --version

2. postgresql 접속하기

$ psql postgres

# 위의 명령어로 입력해서 접속하면
psql (13.1)
Type "help" for help.

postgres=#

# 이렇게 뜰 것이다.

postgresql은 Role을 새로 생성하고 그 Role에 권한을 부여하는 방식으로 진행한다.

Role
: 이전 버전에서는 groupsusers 라는 개념이 분리되어 있었다.
최신 버전의 postgresql은 role 로 두가지 개념이 병합되었다.
role은 로그인 기능, 상속 기능, DB objects 에 대한 접근 기능 등이 있다.

그러나, 아직은 postgresql은 편의상 CREATE USER 혹은 CREATE GROUP 이라는 명령어를 허용한다.

3. role 생성하기

$ CREATE ROLE role이름 WITH LOGIN PASSWORD '패스워드 입력';
# 잘 생성 됐다면 
CREATE ROLE
# 이라고 뜰 것이다.

4. role 계정 확인하기

# DB의 계정 및 role 권한 정보 확인
$ \du 

# 현존하는 role 리스트 확인하기
$ SELECT rolname From pg_roles;

나는 test1 이라는 role을 생성했지만, 부여된 권한이 아무것도 없다. 명령어를 통해 권한을 부여할 수 있다.

5. 권한 부여하기

$ ALTER ROLE test1 CREATEDB;

# DB 생성하는 권한을 줄 거고, 'CREATEDB' 이 부분을 옵션이라고 하는데
# 이 옵션은 여러가지가 있다.

그럼 이제 추가된 사용자(role)로 접속할 수 있다.

6. 해당 유저(Role)로 접속하기

$ psql postgres -U 생성한 유저 이름
 # 예시 : psql postgres -U test1

이렇게 유저로 접속을 하면
postgres=# 로 보이던 이전과 달리 postgres=> 로 바뀐 것을 알 수 있다.
차이는 ?
# 은 superuser를 의미하고, > 는 superuser 가 아님을 의미한다.

7. 데이터베이스 확인하기

# 리스트 확인
$ \list

# 데이터베이스 생성
$ CREATE DATABASE 생성하려는 db 이름;
 # 예시 : CREATE DATABASE person;
 
# 특정 데이터베이스로 연결하기
# mysql에서 어떤 데이터베이스를 사용할 건지 입력하는 'use 사용할 DB' 커멘드 같은 개념이다.
$ \connect 연결하려는 DB이름;
 # 예시 : \connect person;
You are now connected to database "person" as user "test1"
 # 연결이 잘 됐으면 위와 같이 뜬다.

8. 스키마(Schema) 생성하기

Mysql에서는 Database를 Schema 와 같은 의미로 사용하는 반면,
PostgreSQL 에서는 database 가 schema의 상위 개념이다.
테이블의 집합을 schema라고 표현한다.
즉, Mysql 의 DB == PostgreSQL 의 schema

$ create schema 생성하려는 이름;
 # 예시 : create shema product;

# 스키마 목록 확인
$ \dn

person=> \dn
   List of schemas
  Name   |   Owner
---------+------------
 Schema1    | test1
 Schema2    | test1
 Schema3    | test1
 public     | soohyunlee
(4 rows)

나는 person이라는 데이터베이스 안에 Schema1,2,3 이라는 스키마를 생성했다.
public 은 default 로 생성되는 shema이며, 이 public 에 오브젝트를 생성하면
보안관리가 되지 않는다.

9. 스키마에 오브젝트 생성하기

오브젝트 생성 시, 내가 어떤 스키마에 생성할 건지 정해야 하는데, 이걸 정하지 않으면 public 스키마에 생성되기 때문에 어떤 스키마를 사용하겠다를 정해줘야한다.

$ set search_path to Schema1;
 # mysql에서 use Schema1; < 이 명령어와 같다고 보면 된다.

# 확인하기
$ show search_path;
# 위의 명령어를 입력하면 현재 위치한 스키마가 어딘지 알 수 있다.

10. 테이블 생성하기

$ create table 테이블명 (
  name text,
  age integer,
  designation integer
  );

 # 괄호 안은 예시이며 원하는 값으로 채워서 테이블 생성하면 된다.
 
# 테이블 리스트 확인
$ \dt

# 하나의 테이블에 대한 칼럼 확인
$ select * from 테이블명;

참조 : 공식문서

profile
back-end 개발자

0개의 댓글