SW/리눅스

Debian 9 : PostgreSQL 설치하는 방법, 예제, 명령어

얇은생각 2021. 1. 1. 07:30
반응형

흔히 Postgres로 알려진 PostgreSQL은 오픈 소스 범용 객체-관계 데이터베이스 관리 시스템입니다. PostgreSQL에는 온라인 백업, 시점 복구, 중첩 트랜잭션, SQL 및 JSON 쿼리, MVCC(다중 버전 동시 제어), 비동기 복제 등과 같은 많은 고급 기능이 있습니다.

이 튜토리얼에서는 Postgre를 설치하는 방법을 보여 드리겠습니다. Debian 9에서 SQL을 사용하고 기본 데이터베이스 관리의 기본 원리를 살펴봅니다.

 

 

Debian 9 : PostgreSQL 설치하는 방법, 예제, 명령어

 

 

필수 구성 요소

이 튜토리얼을 진행하기 전에 로그인한 사용자에게 sudo 권한이 있는지 확인합니다. 

 

 

 

PostgreSQL 설치

이 기사를 쓸 당시, Postgre 최신판입니다. Debian 저장소에서 사용할 수 있는 PostgreSQL 버전 9.6입니다.

Debian 서버의 PostgreSQL를 설치하고 다음 단계를 완료합니다.

 01. 먼저 로컬 패키지 인덱스를 업데이트합니다.

sudo apt update

 

 

02. PostgreSQL 서버를 설치하고, PostgreSQL 기여 패키지에 대한 추가 기능을 제공하하고 PostgresSQL 데이터베이스는 다음과 같습니다.

sudo apt install postgresql postgresql-contrib

 

 

03. 설치가 완료되면 PostgreSQL가 표시되고 서비스가 자동으로 시작됩니다. 설치를 확인하기 위해 PostgreSQL 데이터베이스 서버는 psql 유틸리티를 사용하여 서버 버전을 출력합니다.

sudo -u postgres psql -c "SELECT version();"

 

 

출력은 다음과 같습니다.

#                                                  version                                                  
# -----------------------------------------------------------------------------------------------------------
# PostgreSQL 9.6.10 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
# (1 row)

 

 

Psql은 PostgreSQL 서버와 상호 작용할 수 있는 대화형 터미널 프로그램입니다.

 

 

 

PostgreSQL 역할 및 인증 방법

PostgreSQL은 역할 개념을 사용하여 데이터베이스 액세스 권한을 처리합니다. 역할은 데이터베이스 사용자 또는 데이터베이스 사용자 그룹을 나타낼 수 있습니다.

PostgreSQL은 여러 인증 방법을 지원합니다. 가장 일반적으로 사용되는 방법은 다음과 같습니다.

Trust - 이 방법을 사용하면 pg_hba.conf에 정의된 조건이 충족되는 한 역할이 암호 없이 연결할 수 있습니다.

Password - 역할은 암호를 제공하여 연결할 수 있습니다. 암호는 scram-sha-256 md5 및 암호(지우기 텍스트)로 저장할 수 있습니다.

Ident - 이 방법은 TCP/IP 연결에서만 지원됩니다. 사용자 이름 매핑(선택 사항)을 사용하여 클라이언트의 운영 체제 사용자 이름을 가져오는 방식으로 작동합니다.

Peer - ID와 동일하지만 로컬 연결에서만 지원됩니다.

 

PostgreSQL 클라이언트 인증확인은 pg_hba.conf라는 구성 파일에 정의되어 있습니다. 로컬 연결의 경우 기본적으로 PostgreSQL 피어 인증 방법을 사용하도록 설정되었습니다.

PostgreSQL 사용자는 PostgreSQL를 설치할 때 자동으로 생성됩니다. 이 사용자는 PostgreSQL 인스턴스의 수퍼유저와 MySQL 루트 사용자와 동일합니다.

PostgreSQL Server에 로그인하고 사용자로 먼저 전환한 다음 Postgre에 액세스할 수 있습니다. psql 유틸리티를 사용하여 SQL 프롬프트를 표시합니다.

sudo su - postgres
psql

 

 

여기서 Postgre와 상호 작용할 수 있습니다.SQL 인스턴스입니다. Postgre를 종료하려면 다음을 수행합니다.SQL 셸 유형은 다음과 같습니다.

\q

 

 

sudo 명령을 사용하여 Postgre에 액세스할 수 있습니다. 사용자를 전환하지 않고 SQL 프롬프트를 표시합니다.

sudo -u postgres psql

 

 

postgres 사용자는 일반적으로 로컬 호스트에서만 사용되며 이 사용자의 암호를 설정하지 않는 것이 좋습니다.

 

 

 

PostgreSQL 역할 및 데이터베이스 생성

createuser 명령을 사용하여 명령줄에서 새 역할을 생성할 수 있습니다. CREATEROL 권한이 있는 수퍼유저 및 역할만 새 역할을 만들 수 있습니다.

다음 예에서는 johndb라는 데이터베이스를 새로 만들고 데이터베이스에 대한 권한을 부여합니다.

 

01. 새 PostgreSQL 역할을 생성합니다.

다음 명령은 john이라는 새 역할을 만듭니다.

sudo su - postgres -c "createuser john"

 

 

02. 새 PostgreSQL 데이터베이스로 이동합니다.

createdb 명령을 사용하여 johndb라는 새 데이터베이스를 생성합니다.

sudo su - postgres -c "createdb johndb"

 

 

03. 권한을 부여합니다.

이전 단계에서 생성한 데이터베이스에 대해 John 사용자에게 사용 권한을 부여하려면 PostgreSQL 셸은 다음과 같습니다.

sudo -u postgres psql

 

 

다음 쿼리를 실행합니다.

grant all privileges on database johndb to john;

 

 

 

PostgreSQL에 대한 원격 액세스 활성화

기본적으로 PostgreSQL 서버는 로컬 인터페이스 127.0.0.1에서만 수신합니다. PostgreSQL 서버에 대한 원격 액세스를 활성화하고 구성 파일 postgresql.conf를 열고 INSTANS AND 인증 섹션에서 listen_addresses = '*'를 추가합니다.

sudo vim /etc/postgresql/9.6/main/postgresql.conf

# #------------------------------------------------------------------------------
##  CONNECTIONS AND AUTHENTICATION
# #------------------------------------------------------------------------------
# 
# # - Connection Settings -
# 
# listen_addresses = '*'     # what IP address(es) to listen on;

 

 

파일을 저장하고 PostgreSQL 서비스에는 다음이 포함됩니다.

sudo service postgresql restart

 

 

ss 유틸리티를 사용하여 변경 사항을 확인합니다.

ss -nlt | grep 5432

# LISTEN   0         128                 0.0.0.0:5432             0.0.0.0:*
# LISTEN   0         128                    [::]:5432                [::]:*

 

 

PostgreSQL 서버 위의 출력에서 볼 수 있듯이, 모든 인터페이스(0.0.0.0)에서 수신 중입니다.

마지막 단계는 pg_hba.conf 파일을 편집하여 서버가 원격 연결을 허용하도록 구성하는 것입니다.

다음은 다양한 사용 사례를 보여 주는 몇 가지 예입니다.

# /etc/postgresql/9.6/main/pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane will be able to access all databases from all locations using a md5 password
host    all             jane            0.0.0.0/0                md5

# The user jane will be able to access only the janedb from all locations using a md5 password
host    janedb          jane            0.0.0.0/0                md5

# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host    all             jane            192.168.1.134            trust

 

반응형