티스토리 뷰

0. PostgreSQL

PostgreSQL 은 확장 가능성 및 표준 준수를 강조하는 객체-관계형 데이터베이스 관리 시스템의 하나입니다.

SQL 을 이용하여 데이터를 다룰 수 있게하며, 안정적인 트랜잭션 및 다양한 격리레벨의 동시성과 같은 많은 고급 기능을 제공합니다. 실제로 mac os 의 기본 데이터 베이스로 사용되는 PostgreSQL을 ubuntu 20.04 에  설치하는 방법을 알아보겠습니다

ubuntu 20.04 원격 서버에 mac 으로 ssh 접속해서 설치했습니다.


1. PostgreSQL 설치 및 확인

서버의 로컬 페키지를 업데이트 해줍니다.

$ sudo apt update

PostgreSQL package 를 -contrib package 와 함께 설치해줍니다.

$ sudo apt install postgresql postgresql-contrib

PostgreSQL 은 extension 이라는 기능을 제공합니다. extenstion을 통해서 제 3자의 프로그램을 plug-in 형태로 PostgreSQL에 연동할 수 있습니다. 이때 postgresql-contrib package 는 PostgreSQL 에서 사용하는 다양한 extenstion 을 제공합니다.

대표적으로 pg_stat_statements, pgrowlocks, pgcrypto 등의 extension들이 포함됩니다. 상세한 목록은 공식 메뉴얼(https://www.postgresql.org/docs/current/contrib.html)에서 확인할 수 있습니다.

 

설치 로그를 확인해보면 다음과 같은 문구를 확인할 수 있습니다. 

Success. You can now start the database server using:

    pg_ctlcluster 12 main start

PostgreSQL 은 클러스터로 데이터베이스를 관리합니다. 간단하게 '클러스터 > 데이터베이스 > 테이블' 의 순서로 생각해볼 수 있습니다. 여러개의 클러스터가 존재할 수 있고 한 클러스터 내에 여러개의 데이터베이스를 가질 수 있습니다.

pg_ctlcluster 는 PostgreSQL의 다양한 버전과 여러 클러스터를 효율적으로 관리하기 위한 스크립트 파일입니다. 

database server를 실행하기 위해 위의 명령어를 입력하면 이미 실행되고 있다고 주의문구가 나옵니다. 정말 실행되고 있는지 확인해볼까요?

$ ps -ef | grep postgres

로 실행되고 있는 process 를 확인해보면 

postgres    3496       1  0 04:53 ?        00:00:00 /usr/lib/postgresql/12/bin/postgres -D /var/lib/postgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.conf

postgres 의 Postmaster 프로세스를 확인할 수 있습니다. ubuntu 의 pstree 를 이용하면 process 의 부모 자식관계를 확인할 수 있는데, 이를 이용해서 Postmaster 프로세스의 tree 를 확인해보면 (pstree -p PID 를 이용해 특정 PID의 프로세스 구조를 확인가능)

$ pstree -p 3496 -al
postgres,3496 -D /var/lib/postgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.conf
  ├─postgres,3498
  ├─postgres,3499
  ├─postgres,3500
  ├─postgres,3501
  ├─postgres,3502
  └─postgres,3503

Postmaster 프로세스와 그에 딸린 자식 프로세스들을 확인할 수 있습니다. 

Postmaster 의 자식 프로세스로 logger, checkpointer, autovacuum 등 다양한 백그라운드 프로세스들이 있습니다.


2. PostgreSQL prompt

postgres 는 roles 방식을 이용해서 사용자의 인증과 인가처리를 처리합니다. 이런 roles 방식은 유닉스 계열의 유저/그룹 방식과 유사합니다. postgres 가 설치 될때, postgres 는 ident authentication 을 사용하도록 세팅됩니다. 이렇게 세팅됨으로서 postgres 는 운영체제의 계정과 연동됩니다. 즉 postgres 에서 A 라는 새로운 role 을 만들고 A에 (가), (나) 라는 권한을 부여한다면, A 라는 이름의 user 가 ubuntu 에 생성되고, 우리가 ubuntu 의 A user 로 로그인하여 postgres 에 접속한다면 (가), (나) 의 권한을 사용할 수 있습니다.

 

postgres 는 설치과정에서 기본 사용자로 postgres role을 생성합니다. 처음 postgres가 설치될때의 로그를 살펴보면,

Setting up ssl-cert (1.0.39) ...
Setting up postgresql-common (214ubuntu0.1) ...
Adding user postgres to group ssl-cert

Creating config file /etc/postgresql-common/createcluster.conf with new version
Building PostgreSQL dictionaries from installed myspell/hunspell packages...

Adding user postgres to group ssl-cert  부분에서 postgres 이름의 user 가 추가된 것을 확인할 수 있습니다.

 

또한 아래 명령어를 통해 postgres 라는 이름의 사용자가 ubuntu 에 생성된 것을 확인할 수 있습니다.

$ cut -f1 -d: /etc/passwd | grep postgres

 

그럼 postgres prompt 에 접속해볼까요?

$ psql

위 명령어를 통해 postgres prompt 에 접속할 수 있습니다. 하지만 psql: error: FATAL:  role "sehyeona" does not exist 와 같은 에러가 발생하는군요. 제 ubuntu의 기본 user는 sehyeona 인데, postgres 에는 다음과 같은 role 이 존재하지 않기 때문에 발생하는 문제입니다. postgres role 에 존재하는 ubuntu user 로 바꿔준 뒤, postgres prompt 에 접속해야합니다. 

$ sudo -i -u postgres
$ psql

postgres user로 변경하고 psql 을 이용해 prompt 에 접속해봅시다. 

 

테스트도 해볼겸 \du+ 명령어를 통해 지금 모든 user 들의 목록을 description과 함께 조회해봅니다.

postgres-# \du+
                                          List of roles
 Role name |                         Attributes                         | Member of | Description
-----------+------------------------------------------------------------+-----------+-------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}        |

 

prompt 를 종료하기위해 다음 명령어를 이용할 수 있습니다.

postgres-# \q

또한 exit를 이용해 postgres user 에서 원래 user 로 돌아갈 수 있습니다. 저의 경우에는 sehyeona 로 돌아왔습니다.

postgres@sehyeona:~$ exit
logout
sehyeona@sehyeona:~$

 

prompt 에 접속하는 또 다른 방법으로 다음 명령어를 이용할 수 있습니다. 

$ sudo -u postgres psql

위 명령어를 이용해 bash shell 을 거치는 과정 없이 곧장 prompt 로 접속할 수 있으며, 종료하는 방식은 위의 코드와 동일합니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함