[PostgreSQL] 우분투에 PostgreSQL 설치하고 둘러보기
업데이트:
[PostgreSQL] 우분투에 PostgreSQL 설치하고 둘러보기
참고링크
참고 링크
DB
- MySQL 윈도우에 설치하기
- MySQL 간단 정리, 우분투, 맥에 설치 하기
- 맥 OS에 MySQL 설치
- 파이썬, MySQL 연동
- 데이터베이스에서 널(null)과 공백의 차이
- 우분투에 PostgreSQL 설치
백엔드
- (1-1)MySQL에 데이터베이스, 테이블 생성하기
- (1-2)장고, MsSQL 연결하기
- (1-2)장고, MySQL 연결하기
- (1-3)장고 inpectdb로 DB 데이터 model.py로 만들기
- (1-4)장고로 MySQL에 있는 데이터 웹상에서 보여주기
- (1-5)장고로 MySQL에 데이터 insert 하기
- (1-6)장고로 MySQL에 데이터 수정(put) 하기
프론트엔드
- (2-1)기본 리액트 프로젝트 생성
- (2-2)리액트 카테고리 레이어 헤더 만들기
- (2-3)장고 API 서버에 요청해서 자료 받아오기(GET)
- (2-4)장고 API 서버에 요청해서 자료 받아오기(GET)
1. PostgreSQL 설치하기(2022.09.28 수정)
본 예제는 우분투 환경에서 실행했습니다.
$ sudo apt update
먼저 우분투 패키지를 업데이트 합니다.
$ sudo apt install postgresql postgresql-contrib
위 명령어를 입력해 postgresql을 설치합니다. postgresql이 설치되면 자동으로 작동합니다.
$ sudo systemctl status postgresql.service
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2022-09-28 04:21:48 UTC; 1min 43s ago
Process: 62002 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 62002 (code=exited, status=0/SUCCESS)
CPU: 1ms
Sep 28 04:21:48 ip-172-31-40-144 systemd[1]: Starting PostgreSQL RDBMS...
Sep 28 04:21:48 ip-172-31-40-144 systemd[1]: Finished PostgreSQL RDBMS.
위 명령어는 postgresql이 정상적으로 작동되고 있는지 확인하는 코드입니다. active 라고 되어 있는거 보니 제대로 작동 되고 있는 것을 알 수 있습니다.
2. 롤(role) 개념과 PostgreSQL 시작하기
2.1. 롤(role)이란
PostgreSQL에는 인증과 관련해서 “롤(roles)”이라는 개념이 있습니다. 롤은 유닉스 시스템에서 유저와 그룹의 개념이라고 생각할 수 있습니다.
일단 PostgreSQL을 설치하면 기본적으로 postgres라는 유저 계정이 생성되게 되는데, 이 postgres라는 계정이 디폴트 Postgres role입니다. 그렇다면 postgres라는 계정을 이용해 postgreSQL를 사용해 보겠습니다. 이는 다음과 같이 두가지 방법이 있습니다.
2.2. PostgreSQL 시작하기(1)
일단 계정을 postgres로 변경해줍니다.
$ sudo -i -u postgres
postgres@server$
위 명령어를 입력하면 postgres 계정으로 변경되며 PostgreSQL을 사용할 수 있습니다.
postgres@server$ psql
psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# \q
postgres@server$ exit
$
psql 커맨드를 입력하면 PostgreSQL이 실행되게 됩니다. 만약 종료하고 싶다면 위와 같이 역슬래시+q를 입력하면 됩니다. 그리고 나서 exit를 입력하면 postgre 계정에서 로그아웃하게 됩니다.
2.3. PostgreSQL 시작하기(2)
위 방법으로는 유저를 postgres로 변경하고 psql을 실행함으로써 총 두 단계의 과정을 거쳤는데, 다음 커맨드를 사용하면 더 편하게 PostgreSQL을 사용할 수 있습니다.
$ sudo -u postgres psql
psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# \q
$
위 방법을 사용하면 역슬래시q 이후에 exit를 별도로 입력할 필요가 없어서 편합니다.
2.4. 비밀번호 설정하기
postgres 계정의 비밀번호를 설정하는 방법은 다음과 같습니다. 저는 간단하게 1234라고 설정했습니다.
$ sudo -u postgres psql postgres
[sudo] password for :
psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# \password
Enter new password for user "postgres":
Enter it again:
postgres=# \q
2.4. 데이터베이스 확인하기
postgres 계정으로 데이터베이스를 확인해보겠습니다.
postgres=# \list
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+---------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
위와 같이 역슬래시list를 입력하면 데이터베이스를 확인할 수 있는데, postgres라는 계정명과 동일한 데이터베이스를 확인할 수 있습니다. postgreSQL에서는 롤이 생성되면 롤 이름과 동일한 데이터베이스가 생성되는 것을 알 수 있습니다.
2.5. 새로운 롤 생성하기
새로운 롤을 생성하고 싶다면 postgres계정으로 다음 커맨드를 입력하면 됩니다.
(방법1)
postgres@server~:$ createuser --interactive
Enter name of role to add: testuser1
Shall the new role be a superuser? (y/n) y
(방법2)
$ sudo -u postgres createuser --interactive
위와 같이 롤을 생성한다면 롤이 추가되었는지 확인해보겠습니다.
$ sudo -i -u postgres
postgres@server~:$ psql
psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
testuser1 | Superuser, Create role, Create DB | {}
3. 외부 접근 허용하기
/etc/postgresql/14/main
경로에 존재하는 pg_hba.conf 파일을 다음과 같이 수정합니다.
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
host all all 0.0.0.0/0 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
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
그리고 다음과 같이 postgresql을 다시 시작합니다.
$ sudo systemctl restart postgresql
그리고 netstat으로 확인을 해봅니다.
$ netstat -ntlp | grep 5432
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
3. 데이터는 어디에 저장될까?
PostgreSQL에서 데이터는 다음 두 경로에 저장됩니다.
/var/lib/postgresql
/etc/postgresql
그렇다면 위 경로에 어떤 데이터가 존재하는지 알아봅시다.
먼저 /var/lib/postgresql
경로부터 확인해보겠습니다.
server@host:/var/lib/postgresql/14/main# ll
total 92
drwx------ 19 postgres postgres 4096 Sep 28 05:56 ./
drwxr-xr-x 3 postgres postgres 4096 Sep 28 04:21 ../
-rw------- 1 postgres postgres 3 Sep 28 04:21 PG_VERSION
drwx------ 5 postgres postgres 4096 Sep 28 04:21 base/
drwx------ 2 postgres postgres 4096 Sep 28 05:57 global/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_commit_ts/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_dynshmem/
drwx------ 4 postgres postgres 4096 Sep 28 07:51 pg_logical/
drwx------ 4 postgres postgres 4096 Sep 28 04:21 pg_multixact/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_notify/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_replslot/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_serial/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_snapshots/
drwx------ 2 postgres postgres 4096 Sep 28 05:56 pg_stat/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_stat_tmp/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_subtrans/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_tblspc/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_twophase/
drwx------ 3 postgres postgres 4096 Sep 28 04:21 pg_wal/
drwx------ 2 postgres postgres 4096 Sep 28 04:21 pg_xact/
-rw------- 1 postgres postgres 88 Sep 28 04:21 postgresql.auto.conf
-rw------- 1 postgres postgres 130 Sep 28 05:56 postmaster.opts
-rw------- 1 postgres postgres 107 Sep 28 05:56 postmaster.pid
다음으로는 /etc/postgresql
경로를 보겠습니다.
server@host:/etc/postgresql/14/main# ll
total 68
drwxr-xr-x 3 postgres postgres 4096 Sep 28 05:54 ./
drwxr-xr-x 3 postgres postgres 4096 Sep 28 04:21 ../
drwxr-xr-x 2 postgres postgres 4096 Sep 28 04:21 conf.d/
-rw-r--r-- 1 postgres postgres 315 Sep 28 04:21 environment
-rw-r--r-- 1 postgres postgres 143 Sep 28 04:21 pg_ctl.conf
-rw-r----- 1 postgres postgres 5080 Sep 28 05:54 pg_hba.conf
-rw-r----- 1 postgres postgres 1636 Sep 28 04:21 pg_ident.conf
-rw-r--r-- 1 postgres postgres 29029 Sep 28 05:50 postgresql.conf
-rw-r--r-- 1 postgres postgres 317 Sep 28 04:21 start.conf