Mac 유저를 위한 PostgreSQL 설치 및 유저,데이터베이스 설정하기

taeseong park
6 min readJul 12, 2020

--

내가 PostgresSQL을 나의 맥북에 처음 세팅을 하게 되면서 겪었던 경험들을 여기에 공유 해 보려고 한다. 나같은 입문자들에게 도움이 되었으면..ㅎ

EDB를 통한 설치 및 삭제

PostgreSQL을 EDB 페이지를 통해 Installer를 다운받고 설치를 했었다.

설치 후 postgre(psql) command도 유효하지 않았고, /Library/PostgreSQL/12/bin 경로에 있길래 거기에 직접 들어가서 접속 시도를 해 보았다.

그런데 로그인을 하려는데 자꾸 비밀번호가 안 맞는지 접속이 안 되었다.. 내가 패키지로 설치할 때 설정한 비밀번호로 분명 입력했는데…

/Library/PostgreSQL/12/bin$ ./psql -U postgrePassword for user postgre: 
psql: error: could not connect to server: FATAL: password authentication failed for user "postgre"

그래서 EDB로 설치한 PostgreSQL을 지우기로 했다. 아래 글이 많은 도움이 되었다.

stackoverflow.com: PosgreSQL 완벽히 지우는 방법

brew를 통한 설치 및 세팅

설치

$ brew install postgresql

서비스 시작

$ brew services start postgresql

이 포스팅 에서는, 컴퓨터 재부팅 때마다 서비스를 켜 주는 커맨드가 소개되고 있는데,

$ pg_ctl -D /usr/local/var/postgres start && brew services start postgresql

이 커맨드를 안 실행하고 한번 재부팅 해 보았는데 postgres 서비스가 잘 살아있는 것 같다.

psql 접속 및 데이터베이스 생성

$ psql postgres
postgres=# CREATE DATABASE <databaseName>;

사용자 생성

Postgres doesn’t actually directly manage users or groups, like most standard permission models do. Instead, it directly manages what it calls roles. (reference 문서)

Role을 새로 생성하고, 거기에 권한을 부여하는 방식으로 진행한다.

postgres=# CREATE ROLE test WITH LOGIN PASSWORD 'test!';
CREATE ROLE

현존하는 Role 확인하기

SELECT rolname FROM pg_roles;

권한 부여하기

postgres=# ALTER ROLE test CREATEDB;

지원되는 다른 option모음

  • SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS, …

사용자 권한 확인하기

사용자 리스트 보기

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

추가한 사용자로 접속하기

$ psql postgres -U test
psql (12.3)
Type "help" for help.
postgres=>
  • 보면 postgres=# 가 아니라 postgres=> 로 바뀐 것을 확인 할 수 있다.
  • # 는 superuser 라는 뜻이고, > 는 superuser가 아니라는 것이다

데이터베이스 추가하기

postgres=> CREATE DATABASE test;
CREATE DATABASE

특정 유저에게 DB의 모든 권한 부여하기

부여 가능한 권한 모음

  • SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | CREATE | CONNECT | TEMPORARY | EXECUTE | USAGE
  • ALL PRIVILEGES: 위에 열거된 모든 권한 포함

GRANT ALL PRIVILEGES ON DATABASE [database] TO [role(user)];

postgres=> GRANT ALL PRIVILEGES ON DATABASE test TO test;
GRANT
postgres=> \connect test
You are now connected to database "test" as user "test".

데이터베이스 관련 리스트 보는 커맨드

데이터베이스 리스트 보기

postgres=> \list

테이블 리스트 보기

postgres=> \dt

특정 database로 연결하기

postgres=> \connect test <- 'test' DB로 연결

스키마 생성

MySQL을 사용하던 내 입장에서는 보통 Database 안에 Table을 곧바로 만드는 개념이 익숙한데, PostgreSQL에서는 Database -> Schema -> Table 개념이어서 생소했다.

$ psql postgres -U testpostgres=> \connect test
You are now connected to database "test" as user "test".
test=> CREATE SCHEMA test;
CREATE SCHEMA

주의점은 권한이 있는 database로 connect를 하고 스키마를 만들어야 한다. 그렇지 않으면 Permission denied를 내뱉을 것이다.

스키마 목록 확인 커맨드

\dn

test=> \dnList of schemasName  |  Owner
--------+----------
public | [superuser]
test | test
(2 rows)

끝.. 내용 보강되었으면 하는 점이나 고칠 것 댓글로 의견 남겨 주신다면 환영합니다 ㅎ

--

--