PostgreSQL은 데이터베이스에 위치 정보, 거리 정보, 도형 정보 등을 저장하고 연산하기 위해 버클리 대학에서 1975년 Ingres 프로젝트를 시작으로 1991년 Postgres 버전3 출시, 이후 PostgreSQL 프로젝트로 변경되어 15년 넘게 꾸준히 개발되고 있는 오픈 소스 SW 데이터베이스 이다.
홈페이지에서 다운 받지 않고 homebrew를 통해서 다운 받았다.
brew install postgresql
# 버전 확인
psql --version
$ psql postgres
# 위의 명령어로 입력해서 접속하면
psql (13.1)
Type "help" for help.
postgres=#
# 이렇게 뜰 것이다.
postgresql은 Role을 새로 생성하고 그 Role에 권한을 부여하는 방식으로 진행한다.
Role
: 이전 버전에서는groups
와users
라는 개념이 분리되어 있었다.
최신 버전의 postgresql은role
로 두가지 개념이 병합되었다.
role
은 로그인 기능, 상속 기능, DB objects 에 대한 접근 기능 등이 있다.
그러나, 아직은 postgresql은 편의상CREATE USER
혹은CREATE GROUP
이라는 명령어를 허용한다.
$ CREATE ROLE role이름 WITH LOGIN PASSWORD '패스워드 입력';
# 잘 생성 됐다면
CREATE ROLE
# 이라고 뜰 것이다.
# DB의 계정 및 role 권한 정보 확인
$ \du
# 현존하는 role 리스트 확인하기
$ SELECT rolname From pg_roles;
나는 test1 이라는 role을 생성했지만, 부여된 권한이 아무것도 없다. 명령어를 통해 권한을 부여할 수 있다.
$ ALTER ROLE test1 CREATEDB;
# DB 생성하는 권한을 줄 거고, 'CREATEDB' 이 부분을 옵션이라고 하는데
# 이 옵션은 여러가지가 있다.
그럼 이제 추가된 사용자(role)로 접속할 수 있다.
$ psql postgres -U 생성한 유저 이름
# 예시 : psql postgres -U test1
이렇게 유저로 접속을 하면
postgres=#
로 보이던 이전과 달리 postgres=>
로 바뀐 것을 알 수 있다.
차이는 ?
#
은 superuser를 의미하고, >
는 superuser 가 아님을 의미한다.
# 리스트 확인
$ \list
# 데이터베이스 생성
$ CREATE DATABASE 생성하려는 db 이름;
# 예시 : CREATE DATABASE person;
# 특정 데이터베이스로 연결하기
# mysql에서 어떤 데이터베이스를 사용할 건지 입력하는 'use 사용할 DB' 커멘드 같은 개념이다.
$ \connect 연결하려는 DB이름;
# 예시 : \connect person;
You are now connected to database "person" as user "test1"
# 연결이 잘 됐으면 위와 같이 뜬다.
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 에 오브젝트를 생성하면
보안관리가 되지 않는다.
오브젝트 생성 시, 내가 어떤 스키마에 생성할 건지 정해야 하는데, 이걸 정하지 않으면 public 스키마에 생성되기 때문에 어떤 스키마를 사용하겠다
를 정해줘야한다.
$ set search_path to Schema1;
# mysql에서 use Schema1; < 이 명령어와 같다고 보면 된다.
# 확인하기
$ show search_path;
# 위의 명령어를 입력하면 현재 위치한 스키마가 어딘지 알 수 있다.
$ create table 테이블명 (
name text,
age integer,
designation integer
);
# 괄호 안은 예시이며 원하는 값으로 채워서 테이블 생성하면 된다.
# 테이블 리스트 확인
$ \dt
# 하나의 테이블에 대한 칼럼 확인
$ select * from 테이블명;