PostgreSQL 기본 학습
MySQL을 많이 사용하다가 유로로 넘어가면서 사용빈도가 줄어드는거 같다. 또 호환되던 MariaDB도 점점 호환을 끊는다? 뭐 이런것도 있지만 다른 RDB도 알고 가면 좋겠다고 생각하며 개인 프로젝트에 다양한 DB를 사용하는걸 연습해 볼 생각이다.
결국 PostgreSQL을 간단하게 사용법을 익혀보자! 가 되겠다.
Install
Docker로 Container를 올려 사용하는거기에 사실 설치도 없다. 명령어 하나로 해결하자
$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
Container를 구동! 환경변수?설정?으로 초기비밀번호만 설정해주면 된다.
이외에도 초기유저 이름, db경로등 변수 파라미터가 있는데 필요하면 다시 차근차근 찾아보자...
postgres에는 Super Administrator가 postgres라는 사용자가 있다. mysql의 root 계정관 같은? 컨테이너 실행시에 변수로 변경이 가능해 보인다.
https://hub.docker.com/_/postgres
Postgres - Official Image | Docker Hub
We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy
hub.docker.com
(항상 이렇게 두루뭉술하게 넘어가는데 언젠가는 크게 데이지 않을까?..ㅋㅋㅋ;;;)
참고
Docker 컨테이너로 올리면 설정 파일경로 /var/lib/postgresql/data/postgresql.conf
window의 경우 설치한 경로 [설치경로}/[버전]/data/postgresql.conf
Database 생성
일단 DB 접속을 위한 cmd 기반 클라이언트 psql로 접속하자!
$ psql -U postgres
외부 접속이 아니면 비밀번호도 묻지 않고 시작된다.
* psql 명령어
query문은 mysql과 비슷 하지만 데이터 베이스 조회, 사용자 목록등 조회하는 명령어가 있다. (쿼리로도 가능)
명령어 | 기능 |
\list | 전체 Database 목록 |
\dt | 접속한 Database의 Table 목록 |
\ds | 접속한 Database의 시퀀스 목록 |
\df | 접속한 Database의 함수(Function) 목록 |
\dv | 접속한 Database의 View 목록 |
\du | User 목록 |
* '\?' 명령어로 다른 명령어 목록 조회
쿼리는 mysql과 같아보인다. 생성후에 db조회까지 해보았다.
굿 :-)
계정설정
기본으로 생성된 계정말고 DB별 관리라던가 필요한 계정을 나누어 관리하게 될텐데 한번 생성해보자!
사용자 목록을 조회해보자!
앞서 언급한 postgres 사용자(root)가 나오고 role이 조회가 된다. 굿!
사용자를 만들어보자
문법은 비슷하면서 mysql과 차이가 있다. 그냥 그렇다.
만들어졌다! 그리고 아무런 역활 속성이 없다. 여기서 Role은 DDL에 관여되는 권한으로 보인다.
테이블 마다의 설정은 어떻게 하느냐? 아주 간단하게 생각했는데 이 스키마의 등장으로 머리가 아프기 시작한다...ㅋㅋ
시스템 구조?
Schema
mysql과는 조금 다르게 생긴 구조에 처음에 당황했다. 중간에 schema라고 껴있다. mysql에서 의미하는거와는 조금 다른 듯하여 한번 찾아 보았다.
schema는 데이터 베이스에 작성되는 테이블아니 함수 등의 개체를 그룹화하는것으로... 무슨말인지 모르겠다.
mysql에서 논리 database와 비슷?하다고 할수 있다고 합니다.
database는 schema의 상위 개념이라 설명을 봤습니다. 쉽게 Table의 집합을 schema, 이 schema는 하나의 database를 논리적으로 나누는 개념!... (사용해보면서 좀 더 익혀야겠습니다....)
이 스키마가 DB를 생성하면 기본으로 public이 생성되어 있고 별다른 지정을 하지 않으면 이 schema에 테이블들이 만들어지게 된다! 이 schema로는 이름에 걸맞게 모든 유저가 DML을 사용할 수 있다.
create schema [스키마명] 로 스키마를 생성하고 이 스키마를 사용하게 설정후 테이블을 만들어 보았다.
같은 이름의 테이블을 생성 했지만 다른 스키마여서 생성이 된다! 사용되는 스키마를 변경했기때문에 \dt 명령어로는 public 스키마의 테이블은 조회가 안되고 있다.
이제 모든 사용자가 해당 DB를 조작할 수 있게 해버리는 이 public 스키마를 처리하자!
설정되어 있는 권한을 다 날려버리거나?
public의 owner인 계정으로 들어가 스키마를 삭제해 주었다. ( 해당 스키마에 테이블이 있어 CASCADE 옵션으로 같이 삭제 해주었다)
새로운 유저를 생성하고 접속시도해보았다.
permission denied 가 된다. 굿...
글이 너무 길어지고 정리가 안된다 나누고 정리를 다시해보자 일단 여기까지...