오늘은 우분투 리눅스에 가장 유명한 오픈소스 RDBMS인 postgresql을 설치하고 DB 생성 및 사용자 생성을 하는 법을 빠르게 알아보도록 하겠습니다.
Table Of Contents
postgres 사용자 생성
~$ sudo useradd -d /home/postgres postgres
~$ sudo passwd postgres
새 암호:
잘못된 비밀번호: 암호에 사용자 이름이 있습니다
새 암호 다시 입력:
passwd: 암호를 성공적으로 업데이트했습니다
~$ sudo mkdir /home/postgres
~$ sudo chown postgres:postgres /home/postgres
~$ sudo addgroup postgres sudo
'postgres' 사용자를 'sudo' 그룹에 추가 중...
사용자 postgres을(를) sudo 그룹에 등록 중
완료.
시스템 업데이트
먼저 시스템을 업데이트합니다. 터미널을 열고 아래 명령을 수행해서 업데이트 하시면 됩니다.
상황에 따라 업데이트에 시간이 좀 걸릴 수 있습니다. 전 30분 넘게 걸린것 같습니다.
$ sudo apt update
[sudo] postgres 암호:
받기:1 https://packages.microsoft.com/repos/code stable InRelease [3,590 B]
기존:2 https://dl.winehq.org/wine-builds/ubuntu focal InRelease
받기:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]
무시:4 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 InRelease
기존:5 http://kr.archive.ubuntu.com/ubuntu jammy InRelease
받기:6 http://kr.archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]
기존:7 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 Release
기존:9 https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu jammy InRelease
기존:10 http://kr.archive.ubuntu.com/ubuntu jammy-backports InRelease
받기:11 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [1,718 kB]
받기:12 http://kr.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [1,086 kB]
받기:13 http://kr.archive.ubuntu.com/ubuntu jammy-updates/universe i386 Packages [706 kB]
받기:14 http://kr.archive.ubuntu.com/ubuntu jammy-updates/universe Translation-en [250 kB]
내려받기 4,020 k바이트, 소요시간 21초 (195 k바이트/초)
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료
149 패키지를 업그레이드할 수 있습니다. 확인하려면 'apt list --upgradable'를 실행하십시오.
W: https://dl.winehq.org/wine-builds/ubuntu/dists/focal/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key( 8) for details.
$ sudo apt upgrade
....
gir1.2-gdm-1.0:amd64 (42.0-1ubuntu7.22.04.4) 설정하는 중입니다 ...
gir1.2-mutter-10:amd64 (42.9-0ubuntu8) 설정하는 중입니다 ...##############################################################################################################################################..]
gdm3 (42.0-1ubuntu7.22.04.4) 설정하는 중입니다 ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...
$
PostgreSQL 설치
PostgreSQL과 패키지를 설치합니다. 다음의 명령어를 입력하세요
$ sudo apt install postgresql
[sudo] postgres 암호:
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
libpcap0.8:i386
'sudo apt autoremove'를 이용하여 제거하십시오.
다음의 추가 패키지가 설치될 것입니다 :
libcommon-sense-perl libjson-perl libjson-xs-perl libllvm14 libpq5 libtypes-serialiser-perl postgresql-14 postgresql-client-14 postgresql-client-common postgresql-common sysstat
제안하는 패키지:
postgresql-doc postgresql-doc-14 isag
다음 새 패키지를 설치할 것입니다:
libcommon-sense-perl libjson-perl libjson-xs-perl libllvm14 libpq5 libtypes-serialiser-perl postgresql postgresql-14 postgresql-client-14 postgresql-client-common postgresql-common sysstat
0개 업그레이드, 12개 새로 설치, 0개 제거 및 3개 업그레이드 안 함.
42.4 M바이트 아카이브를 받아야 합니다.
이 작업 후 161 M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] Y
받기:1 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 libcommon-sense-perl amd64 3.75-2build1 [21.1 kB]
받기:2 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 libjson-perl all 4.04000-1 [81.8 kB]
받기:3 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 libtypes-serialiser-perl all 1.01-1 [11.6 kB]
받기:4 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 libjson-xs-perl amd64 4.030-1build3 [87.2 kB]
...
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/14/main ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Seoul
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
update-alternatives: using /usr/share/postgresql/14/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode
postgresql (14+238) 설정하는 중입니다 ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...
$
설치 확인
설치가 완료되면 PostgreSQL 서비스가 자동으로 시작됩니다. psql 도구를 사용하여 PostgreSQL 데이터베이스 서버에 연결하고 서버 버전을 출력하여 설치를 확인합니다.
다음과 같은 명령을 수행해 보고 결과를 확인하시면 됩니다.
$ psql
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# select version();
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.12 (Ubuntu 14.12-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
(1 row)
postgres=#
사용자 및 데이터베이스 생성
PostgreSQL 사용자 및 데이터베이스를 생성합니다. createuser와 createdb는 PostgreSQL을 설치할 때 함께 설치된 유틸리티이므로, 쉘에서 바로 명령을 수행하시면 됩니다. psql에서 수행하는 것이 아니니 주의하세요.
postgres=# quit
$ which createuser
/usr/bin/createuser
$ createuser test
$ createdb testdb
데이터베이스의 사용자에게 사용 권한 부여
앞에서 만든 데이터베이스의 사용자에게 사용 권한을 부여합니다. test 사용자에게 testdb의 모든 권한을 부여하기 위해서 psql에 접속하고, 다음의 명령어를 입력하시면 됩니다.
$ psql
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb to test;
GRANT
postgres=#
PostgreSQL 서버에 대한 원격 액세스 활성화
PostgreSQL 서버는 기본적으로 로컬 인터페이스 (127.0.0.1)에서만 수신 대기합니다. PostgreSQL Server에서 구성 파일 postgresql.conf를 열고 CONNECTIONS AND AUTHENTICATION 섹션에서 listen_addresses = '*'을 입력하셔야 원격 접속이 가능합니다.
일반적으로 우분투에서 패키지 설치를 하게되면 보통 /etc/postgresql/버전/main/postgresql.conf 경로에 위치합니다. 여기서 '버전’은 설치된 PostgreSQL의 버전을 나타냅니다.
저의경우 14버전이 설치되어 아래와 같이 파일이 존재합니다.
$ ls /etc/postgresql/14/main/
conf.d environment pg_ctl.conf pg_hba.conf pg_ident.conf postgresql.conf start.conf
여기서 postgresql.conf를 vi로 열어서 다음과 같이 편집합니다.
# - Connection Settings -
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '' # (change requires restart)
위의 내용을 아래와 같이 수정합니다.
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '' # (change requires restart)
파일을 저장하고 PostgreSQL 서비스를 다시 시작하기 위해서 다음의 명령어를 수행합니다.
$ sudo service postgresql restart
[sudo] postgres 암호:
$
새로 생성한 계정 접속
위에서 생성한 test 계정으로 처음 접속하면 아래와 같이 에러가 발생합니다. 이 에러는 PostgreSQL에서 “test” 사용자로의 접속이 Peer 인증에 실패했음을 나타냅니다. Peer 인증은 클라이언트 프로세스가 데이터베이스에 연결하려는 사용자의 운영 체제 사용자 이름이 데이터베이스 사용자 이름과 일치하는지 확인하는 방법으로 기본 설정입니다.
$ psql -U test
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "test"
이 문제를 해결하려면, PostgreSQL의 인증 설정 파일인 pg_hba.conf를 수정해야 합니다. pg_hba.conf의 경로도 앞서 설명드린 것처럼 /etc/postgresql/버전/main/ 디렉토리에 위치해 있습니다.
아래와 같이 pg_hba.conf를 vi로 열어서 local 커넥션 보다 이전 라인에 local all test trust의 한 줄을 입력해 줍니다. trust는 암호 없이 연결을 허용하는 연결 메소드 입니다.
md5로 바꾸시면 기본 password를 물어보고 접속을 허용합니다.
$ vi /etc/postgresql/14/main/pg_hba.conf
## pg_hba.conf 파일
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all test trust
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
자 이제 설정을 바꿨으면 재시작 한번 해주시고요, 아래 명령을 통해서 앞에서 만든 testdb에 test 계정으로 접속하고 버전을 확인해 보실 수 있습니다.
$ sudo service postgresql restart
$ psql -U test -d testdb
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.
testdb=> select * from version();
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.12 (Ubuntu 14.12-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
(1 row)
testdb=>
'DBMS' 카테고리의 다른 글
Redis Cluster 리샤딩으로 데이터 조정하기 - Resharding (0) | 2024.05.31 |
---|---|
Redis Cluster 예제 app (ruby, python) (0) | 2024.05.30 |
Redis Cluster 리눅스에 설치하고 테스트 하기 (0) | 2024.05.29 |
Redis Cluster 쓰려면 어떤걸 설치 해야하지? - Redis OSS와 Stack의 차이 및 라이선스 그리고 Cluster는? (0) | 2024.05.28 |
벡터 데이터베이스란 무엇이며 어떻게 동작하는지 알아보기 (임베딩, 인덱싱 등) (0) | 2024.05.21 |