PostgreSQL 을 이용한 데이터베이스 관리 기본

PostgreSQLBeginner
지금 연습하기

소개

이 랩에서는 PostgreSQL 을 사용하여 데이터베이스 관리의 기본 사항을 배우게 됩니다. 이 랩은 새로운 데이터베이스 생성, 기존 데이터베이스 목록 및 연결, 더 이상 필요하지 않은 데이터베이스 제거 등 데이터베이스 관리에 필요한 필수 작업을 다룹니다.

먼저 createdb 명령을 사용하여 새로운 데이터베이스를 생성하고 psql 명령을 통해 생성 여부를 확인합니다. 그런 다음, 사용 가능한 모든 데이터베이스를 나열하고 특정 데이터베이스에 연결하는 방법을 배우게 됩니다. 마지막으로, 데이터베이스를 삭제하고 데이터베이스 메타데이터를 보는 방법을 살펴봅니다. 이 랩은 PostgreSQL 에서 기본적인 데이터베이스 관리 작업을 실습 방식으로 소개합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 88%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

새로운 데이터베이스 생성

이 단계에서는 PostgreSQL 에서 새로운 데이터베이스를 생성하는 방법을 배우게 됩니다. 데이터베이스를 생성하는 것은 데이터를 구성하고 저장하는 첫 번째 단계입니다.

시작하기 전에 데이터베이스가 무엇인지 이해해 봅시다. 데이터베이스는 쉽게 접근, 관리 및 업데이트할 수 있도록 구성된 구조화된 데이터 모음입니다. PostgreSQL 에서 데이터베이스는 테이블, 뷰 및 기타 데이터베이스 객체를 위한 컨테이너입니다.

새로운 데이터베이스를 생성하려면 createdb 명령을 사용합니다. 이 명령은 SQL 명령 CREATE DATABASE의 래퍼입니다.

  1. 터미널 열기: 아직 열려 있지 않은 경우 터미널 창을 시작합니다.

  2. 새로운 데이터베이스 생성: createdb 명령 다음에 데이터베이스에 지정하려는 이름을 입력합니다. 예를 들어, mydatabase라는 데이터베이스를 생성하려면 다음 명령을 실행합니다.

    createdb mydatabase

    이 명령은 mydatabase라는 새로운 데이터베이스를 생성합니다. 명령이 성공하면 아무런 출력도 표시되지 않습니다.

  3. 데이터베이스 생성 확인: 데이터베이스가 생성되었는지 확인하려면 psql 명령을 사용하여 모든 데이터베이스를 나열할 수 있습니다. 먼저, 기본 postgres 데이터베이스에 연결합니다.

    psql -d postgres

    postgres=# 프롬프트가 표시됩니다.

  4. 데이터베이스 목록: postgres=# 프롬프트에서 다음 SQL 명령을 실행하여 모든 데이터베이스를 나열합니다.

    \l
    PostgreSQL 의 데이터베이스 목록

    이 명령은 방금 생성한 데이터베이스 (mydatabase) 를 포함한 데이터베이스 목록을 표시합니다. 다음과 유사한 출력을 볼 수 있습니다.

                                     List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
     mydatabase| labex    | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (4 rows)

    mydatabase가 목록에 있는지 확인합니다.

  5. psql 종료: psql 프롬프트를 종료하려면 다음을 입력합니다.

    \q

    그리고 Enter 키를 누릅니다. 일반 터미널 프롬프트로 돌아갑니다.

이제 PostgreSQL 에서 새로운 데이터베이스를 성공적으로 생성했습니다.

데이터베이스 목록 및 연결

이 단계에서는 psql 명령줄 도구를 사용하여 사용 가능한 데이터베이스를 나열하고 특정 데이터베이스에 연결하는 방법을 배우게 됩니다.

  1. 터미널 열기: 아직 열려 있지 않은 경우 터미널 창을 시작합니다.

  2. 사용 가능한 데이터베이스 목록: 모든 데이터베이스를 나열하려면 -l 옵션 (소문자 'L') 과 함께 psql 명령을 사용할 수 있습니다. 이 옵션은 서버의 모든 데이터베이스를 나열합니다. 연결할 데이터베이스를 지정하지 않았으므로 psql은 현재 사용자 이름을 사용하여 연결을 시도합니다.

    psql -l

    이 명령은 데이터베이스 목록과 소유자, 인코딩 및 기타 정보를 표시합니다. 다음과 유사한 출력을 볼 수 있습니다.

                                     List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
     mydatabase| labex    | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (4 rows)

    이 출력은 데이터베이스 이름, 소유자 및 기타 세부 정보를 보여줍니다. 이전 단계에서 생성한 mydatabase 데이터베이스를 볼 수 있습니다.

  3. 특정 데이터베이스에 연결: 특정 데이터베이스에 연결하려면 -d 옵션과 함께 psql 명령을 사용하고 그 뒤에 데이터베이스 이름을 입력합니다. 예를 들어, mydatabase 데이터베이스에 연결하려면 다음 명령을 실행합니다.

    psql -d mydatabase

    연결에 성공하면 mydatabase=# 프롬프트가 표시됩니다. 이는 현재 mydatabase 데이터베이스에 연결되어 있음을 나타냅니다.

  4. 연결 확인: 올바른 데이터베이스에 연결되었는지 확인하려면 다음과 같은 간단한 SQL 명령을 실행할 수 있습니다.

    SELECT version();
    SELECT version 명령의 출력

    이 명령은 연결된 PostgreSQL 서버의 버전을 표시합니다. 출력은 다음과 유사합니다.

                                                     version
    ----------------------------------------------------------------------------------------------------------------
     PostgreSQL 14.7 (Debian 14.7-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
    (1 row)
  5. psql 종료: psql 프롬프트를 종료하려면 다음을 입력합니다.

    \q

    그리고 Enter 키를 누릅니다. 일반 터미널 프롬프트로 돌아갑니다.

이제 psql을 사용하여 사용 가능한 데이터베이스를 성공적으로 나열하고 특정 데이터베이스에 연결했습니다.

데이터베이스 삭제

이 단계에서는 PostgreSQL 에서 데이터베이스를 삭제하는 방법을 배우게 됩니다. 데이터베이스 삭제는 영구적인 작업이므로 이 명령을 사용할 때 주의하는 것이 중요합니다. 데이터베이스 내의 모든 데이터가 손실됩니다.

  1. 터미널 열기: 아직 열려 있지 않은 경우 터미널 창을 시작합니다.

  2. 데이터베이스 삭제: dropdb 명령 다음에 삭제하려는 데이터베이스의 이름을 입력합니다. 예를 들어, mydatabase 데이터베이스를 삭제하려면 다음 명령을 실행합니다.

    dropdb mydatabase

    이 명령은 mydatabase 데이터베이스를 삭제합니다. 명령이 성공하면 아무런 출력도 표시되지 않습니다.

    중요: 데이터베이스를 삭제하기 전에 아무도 해당 데이터베이스에 연결되어 있지 않은지 확인하십시오. 활성 연결이 있는 경우 dropdb 명령이 실패할 수 있습니다.

  3. 데이터베이스 삭제 확인: 데이터베이스가 삭제되었는지 확인하려면 psql 명령을 사용하여 모든 데이터베이스를 나열할 수 있습니다. 먼저, 기본 postgres 데이터베이스에 연결합니다.

    psql -d postgres
    postgres 에 연결 후 프롬프트

    postgres=# 프롬프트가 표시됩니다.

  4. 데이터베이스 목록: postgres=# 프롬프트에서 다음 SQL 명령을 실행하여 모든 데이터베이스를 나열합니다.

    \l

    이 명령은 데이터베이스 목록을 표시합니다. mydatabase가 더 이상 목록에 없는지 확인합니다.

                                     List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (3 rows)

    mydatabase가 나열되지 않으면 성공적으로 삭제된 것입니다.

  5. psql 종료: psql 프롬프트를 종료하려면 다음을 입력합니다.

    \q

    그리고 Enter 키를 누릅니다. 일반 터미널 프롬프트로 돌아갑니다.

이제 PostgreSQL 에서 데이터베이스를 성공적으로 삭제했습니다. 이 작업은 되돌릴 수 없으므로 데이터베이스를 삭제할 때 주의하십시오.

데이터베이스 메타데이터 보기

이 단계에서는 PostgreSQL 에서 데이터베이스 메타데이터를 보는 방법을 배우게 됩니다. 메타데이터는 "데이터에 대한 데이터"입니다. 데이터베이스의 맥락에서 메타데이터는 테이블, 열, 데이터 유형 및 제약 조건에 대한 정보를 포함하여 데이터베이스 자체의 구조와 특성을 설명합니다.

  1. 터미널 열기: 아직 열려 있지 않은 경우 터미널 창을 시작합니다.

  2. postgres 데이터베이스에 연결: 이전 단계에서 mydatabase를 삭제했으므로 메타데이터를 탐색하기 위해 기본 postgres 데이터베이스에 연결합니다.

    psql -d postgres

    postgres=# 프롬프트가 표시됩니다.

  3. 테이블 목록: 현재 연결된 데이터베이스의 모든 테이블을 나열하려면 \dt 명령을 사용할 수 있습니다.

    \dt

    아직 테이블을 생성하지 않았으므로 출력은 비어 있거나 시스템 테이블을 표시해야 합니다. 다음과 같이 표시될 수 있습니다.

    Did not find any relations.

    또는

                 List of relations
     Schema |         Name          | Type  |  Owner
    --------+-----------------------+-------+----------
     pg_catalog | pg_aggregate          | table | postgres
     pg_catalog | pg_am               | table | postgres
     pg_catalog | pg_amop             | table | postgres
    ...

    출력은 각 테이블의 스키마, 이름, 유형 및 소유자를 보여줍니다.

  4. 테이블 설명: 특정 테이블에 대한 자세한 정보를 보려면 테이블 이름 다음에 \d 명령을 사용할 수 있습니다. 사용자 생성 테이블이 없으므로 시스템 테이블, 예를 들어 pg_class를 살펴보겠습니다.

    \d pg_class
    pg_class 테이블 구조 출력

    이 명령은 열 이름, 데이터 유형 및 모든 제약 조건을 포함하여 pg_class 테이블의 구조를 표시합니다. 출력은 상당히 방대하지만 테이블 정의에 대한 포괄적인 개요를 제공합니다.

                                         Table "pg_catalog.pg_class"
          Column       |   Type    | Collation | Nullable | Default | Storage  | Stats target | Description
    -------------------+-----------+-----------+----------+---------+----------+--------------+-------------
     oid               | oid       |           | not null |         | plain    |              |
     relname           | name      |           | not null |         | plain    |              |
     relnamespace      | oid       |           | not null |         | plain    |              |
     reltype           | oid       |           | not null |         | plain    |              |
     reloftype         | oid       |           | not null |         | plain    |              |
     relowner          | oid       |           | not null |         | plain    |              |
     relam             | oid       |           | not null |         | plain    |              |
     relfilenode       | oid       |           | not null |         | plain    |              |
     reltablespace     | oid       |           | not null |         | plain    |              |
     relpages          | integer   |           | not null |         | plain    |              |
     reltuples         | real      |           | not null |         | plain    |              |
     relallvisible     | boolean   |           | not null |         | plain    |              |
     reltoastrelid     | oid       |           | not null |         | plain    |              |
     relhasindex       | boolean   |           | not null |         | plain    |              |
     relhasrules       | boolean   |           | not null |         | plain    |              |
     relhastriggers    | boolean   |           | not null |         | plain    |              |
     relhassubclass    | boolean   |           | not null |         | plain    |              |
     relrowsecurity    | boolean   |           | not null |         | plain    |              |
     relforcerowsecurity| boolean   |           | not null |         | plain    |              |
     relispopulated    | boolean   |           | not null |         | plain    |              |
     relreplident      | character |           | not null |         | plain    |              |
     relispartition    | boolean   |           | not null |         | plain    |              |
     relrewrite        | oid       |           | not null |         | plain    |              |
     relacl            | aclitem[] |           |          |         | plain    |              |
     reloptions        | text[]    |           |          |         | plain    |              |
     relpartbound      | pg_node_tree |           |          |         | extended |              |
    Indexes:
        "pg_class_oid_index" UNIQUE, btree (oid)
        "pg_class_relname_nsp_index" UNIQUE, btree (relname, relnamespace)
    Foreign-key constraints:
        "pg_class_relam_fkey" FOREIGN KEY (relam) REFERENCES pg_am(oid)
        "pg_class_relnamespace_fkey" FOREIGN KEY (relnamespace) REFERENCES pg_namespace(oid)
        "pg_class_relowner_fkey" FOREIGN KEY (relowner) REFERENCES pg_authid(oid)
        "pg_class_reltoastrelid_fkey" FOREIGN KEY (reltoastrelid) REFERENCES pg_class(oid)
    Referenced by:
        TABLE "pg_statistic_ext" CONSTRAINT "pg_statistic_ext_relid_fkey" FOREIGN KEY (relid) REFERENCES pg_class(oid)
        TABLE "pg_rewrite" CONSTRAINT "pg_rewrite_ev_class_fkey" FOREIGN KEY (ev_class) REFERENCES pg_class(oid)
        TABLE "pg_trigger" CONSTRAINT "pg_trigger_tgrelid_fkey" FOREIGN KEY (tgrelid) REFERENCES pg_class(oid)
  5. psql 종료: psql 프롬프트를 종료하려면 다음을 입력합니다.

    \q

    그리고 Enter 키를 누릅니다. 일반 터미널 프롬프트로 돌아갑니다.

이제 psql을 사용하여 PostgreSQL 에서 데이터베이스 메타데이터를 성공적으로 보았습니다. 이를 통해 데이터베이스 및 테이블의 구조와 속성을 이해할 수 있습니다.

요약

이 랩에서는 새로운 데이터베이스 생성을 시작으로 PostgreSQL 에서 데이터베이스 관리에 대한 기본 사항을 배웠습니다. 이 프로세스는 터미널에서 원하는 데이터베이스 이름 다음에 createdb 명령을 사용하는 것을 포함합니다. 성공적인 실행은 아무런 출력 없이 데이터베이스를 생성합니다.

생성을 확인하려면 psql -d postgres를 사용하여 기본 postgres 데이터베이스에 연결한 다음, \l 명령을 사용하여 사용 가능한 모든 데이터베이스를 나열하여 새로 생성된 데이터베이스가 있는지 확인합니다.