PostgreSQL 기초 사용법.

postgresql 기초 사용법 – 처음 사용해봄.

*작업환경
OS: ubuntu 22.04
PostgreSQL: 14.12

1. 데이터베이스 접속.

데이터베이스에 접속하기위해서는 postgres 계정을 이용한다. 리눅스 패키지로 설치한 경우에는 postgres 계정이 만들어져 있다.

su 명령으로 계정을 전환한다.

$ sudo su - postgres

데이터베이스에 접속하기 위해 psql 명령을 사용한다.

$ psql
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.

postgres=#

2. 데이터베이스 보기

현재 데이터베이스를 확인하려면, \l 명령을 사용한다. 이것은 mysql의 show databases와 비슷한 결과를 보여준다.

postgres=# \l
                              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)

3. 데이터베이스, 데이터베이스 사용자 만들기.

데이터베이스 만들기
snowfox라는 이름의 데이터베이스를 만든다.

postgres=# create database snowfox;
CREATE DATABASE

확인해 보면 아래처럼 데이터베이스가 만들어졌다.

postgres=# \l
                              List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges
-----------+----------+----------+---------+---------+-----------------------
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 |
 snowfox   | 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
(4 rows)

데이터베이스를 사용할 사용자 만들기.
snowfox라는 사용자를 만들고 비밀번호도 동일하게 만든다.

postgres=# create user snowfox with encrypted password 'snowfox';
CREATE ROLE

데이터베이스를 사용할 권한을 위에서 만든 사용자에게 부여한다.

postgres=# grant all privileges on database snowfox to snowfox;
GRANT

4. 사용자 및 권한 확인.

\du 명령으로 사용자와 사용자의 권한을 확인한다.

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

postgres=# \du snowfox
           List of roles
 Role name | Attributes | Member of
-----------+------------+-----------
 snowfox   |            | {}

5. 위 사용자와 권한으로 데이터베이스 사용.

데이터베이스 접속.

postgres@foo:~$ psql -U snowfox -d snowfox -h localhost -p 5432
Password for user snowfox:
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

snowfox=>

test 테이블 생성.

snowfox=> create table test (
snowfox(> id serial primary key,
snowfox(> name varchar(50),
snowfox(> mail varchar(100)
snowfox(> );

CREATE TABLE
snowfox=> insert into test (name, mail) values ('fox', 'foxx@test.com');
INSERT 0 1
snowfox=> select * from test;
 id | name |     mail
----+------+---------------
  1 | fox  | foxx@test.com
(1 row)

테이블 보기

snowfox=> \dt
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+---------
 public | test | table | snowfox
(1 row)

테이블 description 보기: \d 또는 \d+ 뒤에 테이블 이름을 붙인다.

snowfox=> \d test
                                    Table "public.test"
 Column |          Type          | Collation | Nullable |             Default
--------+------------------------+-----------+----------+----------------------------------
 id     | integer                |           | not null | nextval('test_id_seq'::regclass)
 name   | character varying(50)  |           |          |
 mail   | character varying(100) |           |          |
Indexes:
    "test_pkey" PRIMARY KEY, btree (id)

테이블 삭제

snowfox=> \d
             List of relations
 Schema |    Name     |   Type   |  Owner
--------+-------------+----------+---------
 public | test        | table    | snowfox
 public | test_id_seq | sequence | snowfox
(2 rows)
snowfox=> drop table test;
DROP TABLE
snowfox=> \d
Did not find any relations.

6. 데이터베이스 접속 종료

snowfox-> \q 

7. 데이터베이스 삭제
drop database 명령으로 삭제한다.

postgres=# \l
                              List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges
-----------+----------+----------+---------+---------+-----------------------
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 |
 snowfox   | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =Tc/postgres         +
           |          |          |         |         | postgres=CTc/postgres+
           |          |          |         |         | snowfox=CTc/postgres
 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
(4 rows)
postgres=# drop database snowfox;
DROP DATABASE
postgres=# \l
                              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)

7. 백업 및 복구

백업은 pg_dump 명령을 사용한다.

$ pg_dump -U snowfox -d snowfox -h localhost -p 5432
Password:
--
-- PostgreSQL database dump
--
...

--
-- PostgreSQL database dump complete
--

파일로 저장하는 옵션을 주지 않으면 화면으로 dump된다.

$ pg_dump -U snowfox -d snowfox -h localhost -p 5432 -F c -f snowfox.dmp
Password:

-F c 옵션은 binary파일로 , -F p 는 plain text로 -F t는 tar 파일로 덤프된다.

데이터 베이스를 삭제하고, 복구해 본다.

복구는 pg_restore 명령을 사용한다.

$ pg_restore -U snowfox -d snowfox -h localhost -1 snowfox.dmp
Password:
pg_restore: error: connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL:  database "snowfox" does not exist

데이터베이스를 삭제했기 때문에, 위와 같은 오류가 발생한다.

데이터베이스를 만들고, 다시 복구한다.

postgres@foo:~$ pg_restore -U snowfox -d snowfox -h localhost  snowfox.dmp
Password:

답글 남기기

Your email address will not be published.