도커 허브에 있는 postgres 이미지를 가져오기
docker pull postgres
가져오고
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD="123" --name <containername> postgres
(1) docker run : docker image에서 container를 생성한다.
(2) –name PostgreSQL01 : container의 이름은 PostgreSQL01로 한다.
(3) -p 5432:5432 : 해당 container의 port forwarding에 대해 inbound/outbound port 모두 5432으로 설정한다.
(4) -e : container 내 변수를 설정한다.
(5) POSTGRES_PASSWORD=”암호” : ROOT 암호를 설정 따옴표 내의 내용은 암호이다.
(6) -d postgres : postgres이라는 이미지에서 분리하여 container를 생성한다.
postgres 깔려있는 컨테이너 안에서 Postgres DB db 에 들어가려면
psql -U postgres
를 치면 되는데
난 postgres 라는 DB를 만든적이 없는데 default 로 생기는 건가?
전체 데이터베이스 이름 출력
SELECT datname FROM pg_database;
datname
-----------
postgres
template1
template0
(3 rows)
SELECT datname FROM pg_database WHERE datistemplate = false;
datname
----------
postgres
(1 row)
여기서 template1 ,0 은 뭐지 ? 글고 난 이름이 postgres라는 데이터베이스 만든적이 없는데??
의심해볼만한게 docker run 할때 마지막 인자에 postgres 인데 이건 이미지로부터 컨테이너 실행하는 인자 이다.
그럼 디폴트로 생긴거가 ?
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
이렇게 나온다.
그럼 유저를 추가해보고 psql -U 만든유저이름 으로 postgres에 접속해보자.
create user test1 password '123'; 으로 아무 권한 없는 유저를 만들어 봤다
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
test1 | | {}
그리고 다시 postgres 에 test1유저로 접속하려 하니 권한 문제로 거절 되었다
그럼 유저에 super권한 줘보고 다시 들어가보자.
그래도 안 들어가 진다.
즉, 터미널에서 postgres 에 들어가는 법은 디폴트로 있는 postgres로 들어가는 법 밖에 없나 ?
아~ 일단 psql -U postgres 하면 postgres 유저로 postgres라는 이름의 db 에 들어가는거구나 .
tip brew 로 설치한 postgresql 에서 db 에 들어가려면
psql postgres치면 들어가진다.