우분투 22.04에 PostgreSQL 설치 및 사용하기

소개

관계형 데이터베이스 관리 시스템은 많은 웹 사이트와 애플리케이션의 핵심 구성 요소입니다. 이들은 정보를 저장, 구성 및 액세스하는 구조화된 방법을 제공합니다.

PostgreSQL 또는 Postgres는 관계형 데이터베이스 관리 시스템으로 SQL 질의 언어의 구현을 제공합니다. 이는 표준 준수를 하며 신뢰할 수 있는 트랜잭션과 읽기 잠금 없는 동시성과 같은 많은 고급 기능을 갖추고 있습니다.

이 안내서는 Ubuntu 22.04 서버에 PostgreSQL을 설치하는 방법을 보여줍니다. 또한 일반적인 데이터베이스 관리에 대한 지침도 제공합니다.

필수 조건

이 튜토리얼을 따라하기 위해 Ubuntu 22.04 서버 하나가 필요합니다. 이 서버는 당사의 Ubuntu 22.04용 초기 서버 설정 가이드를 따라 구성되어야 합니다. 이 필수 튜토리얼을 완료한 후에는 관리자 권한이 있는 비-루트 사용자와 기본 방화벽이 있는 서버를 갖게 됩니다.

단계 1 — PostgreSQL 설치

우분투의 기본 저장소에는 PostgreSQL 패키지가 포함되어 있으므로 apt 패키지 시스템을 사용하여 이를 설치할 수 있습니다.

최근에 이를 수행하지 않았다면, 서버의 로컬 패키지 인덱스를 새로 고칩니다:

  1. sudo apt update

그런 다음, 몇 가지 추가 유틸리티와 기능을 추가하는 -contrib 패키지와 함께 PostgreSQL 패키지를 설치합니다:

  1. sudo apt install postgresql postgresql-contrib

systemctl start 명령을 사용하여 서버가 실행 중인지 확인합니다:

  1. sudo systemctl start postgresql.service

이제 소프트웨어가 설치되고 실행 중이므로 작동 방식과 다른 관계형 데이터베이스 관리 시스템과의 차이점을 살펴볼 수 있습니다.

단계 2 — PostgreSQL Roles 및 데이터베이스 사용

기본적으로, Postgres는 인증 및 권한 부여를 처리하기 위해 이라는 개념을 사용합니다. 이것들은 일부 측면에서 일반적인 Unix 스타일의 계정과 유사하지만, Postgres는 사용자와 그룹을 구분하지 않으며 대신 더 유연한 용어 “롤”을 선호합니다.

설치 후에는 PostgreSQL이 피어 인증을 사용하도록 설정되어 있으며, 이는 PostgreSQL 역할을 해당 Unix/Linux 시스템 계정과 연관시킵니다. PostgreSQL 내에서 역할이 존재하면, 해당 이름과 동일한 Unix/Linux 사용자 이름으로 그 역할로 로그인할 수 있습니다.

설치 절차는 기본 PostgreSQL 역할과 관련된 postgres 사용자 계정을 생성했습니다. PostgreSQL을 사용하려면 해당 계정으로 로그인할 수 있습니다.

이 계정을 사용하여 PostgreSQL에 액세스하는 몇 가지 방법이 있습니다.

postgres 계정으로 전환하기

서버에서 다음을 입력하여 postgres 계정으로 전환합니다:

  1. sudo -i -u postgres

그런 다음 다음을 입력하여 PostgreSQL 프롬프트에 즉시 액세스할 수 있습니다:

  1. psql

그런 다음 필요에 따라 데이터베이스 관리 시스템과 상호 작용할 수 있습니다.

다음을 입력하여 PostgreSQL 프롬프트를 종료합니다:

  1. \q

이렇게 하면 postgres Linux 사용자의 명령 프롬프트로 돌아갑니다.

계정 전환 없이 PostgreSQL 프롬프트에 액세스하기

당신은 sudo를 사용하여 직접 postgres 계정으로 원하는 명령을 실행할 수도 있습니다.

예를 들어, 마지막 예제에서는 먼저 postgres 사용자로 전환한 다음 psql을 실행하여 Postgres 프롬프트를 열라고 지시했습니다. 이를 한 단계로 줄여서 psqlpostgres 사용자로서 sudo로 실행할 수 있습니다. 다음과 같이:

  1. sudo -u postgres psql

이렇게 하면 중간에 bash 셸 없이 바로 Postgres에 로그인됩니다.

다시 한 번 강조하자면, 상호 작용하는 Postgres 세션에서 나가려면 다음을 입력하면 됩니다:

  1. \q

많은 사용 사례에서 둘 이상의 Postgres 역할이 필요합니다. 이를 구성하는 방법에 대해 자세히 알아보세요.

단계 3 — 새 역할 만들기

현재 데이터베이스에는 postgres 역할이 구성되어 있습니다. createuser 명령을 사용하여 새 역할을 명령 줄에서 만들 수 있습니다. --interactive 플래그를 사용하면 새 역할의 이름을 묻고 슈퍼 사용자 권한을 가질지 여부를 물어봅니다.

만약 postgres 계정으로 로그인한 상태라면, 다음과 같이 새 사용자를 만들 수 있습니다:

  1. createuser --interactive

대신, 보통의 계정에서 전환하지 않고 각 명령에 sudo를 사용하고 싶다면, 다음과 같이 입력하세요:

  1. sudo -u postgres createuser --interactive

스크립트는 여러 선택지로 사용자에게 프롬프트를 제공하고, 답변에 따라 귀하의 사양에 맞는 사용자를 생성하는 올바른 PostgreSQL 명령을 실행합니다.

Output
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

일부 추가 플래그를 전달하여 더 많은 제어를 얻을 수 있습니다. createuser 명령의 man 페이지를 확인하여 옵션을 살펴보세요:

  1. man createuser

PostgreSQL 설치에 새 사용자가 추가되었지만 아직 데이터베이스를 추가하지 않았습니다. 다음 섹션에서는 이 프로세스를 설명합니다.

단계 4 — 새 데이터베이스 생성하기

PostgreSQL 인증 시스템이 기본적으로 하는 또 다른 가정은 로그인에 사용되는 모든 역할에 대해 해당 역할이 기본적으로 액세스할 수 있는 동일한 이름의 데이터베이스가 있다는 것입니다.

이는 마지막 섹션에서 생성한 사용자가 sammy라고 가정하면 해당 역할은 기본적으로 “sammy”라고도 하는 데이터베이스에 연결을 시도할 것입니다. 적절한 데이터베이스를 createdb 명령으로 생성할 수 있습니다.

만약 postgres 계정으로 로그인한 경우에는 다음과 같이 입력할 수 있습니다:

  1. createdb sammy

대신에 일반 계정에서 전환하지 않고 각 명령에 sudo를 사용하고자 하는 경우에는 다음과 같이 입력합니다:

  1. sudo -u postgres createdb sammy

이 유연성은 필요에 따라 여러 가지 방법으로 데이터베이스를 생성할 수 있도록 합니다.

단계 5 — 새 역할로 Postgres 프롬프트 열기

동료 인증으로 로그인하려면 Postgres 역할 및 데이터베이스와 동일한 이름을 가진 Linux 사용자가 필요합니다.

일치하는 Linux 사용자가 없는 경우 adduser 명령을 사용하여 하나를 만들 수 있습니다. 이 작업은 sudo 권한을 가진 비-root 계정에서 수행해야 합니다(postgres 사용자로 로그인하지 않은 경우):

  1. sudo adduser sammy

새 계정이 준비되면 다음을 입력하여 데이터베이스에 연결하거나 전환할 수 있습니다:

  1. sudo -i -u sammy
  2. psql

또는 다음을 인라인으로 수행할 수도 있습니다:

  1. sudo -u sammy psql

이 명령은 모든 구성 요소가 올바르게 구성되어 있다고 가정하고 자동으로 로그인합니다.

사용자가 다른 데이터베이스에 연결하도록 원하는 경우 다음과 같이 데이터베이스를 지정하여 수행할 수 있습니다:

  1. psql -d postgres

로그인한 후 현재 연결 정보를 확인할 수 있습니다. 다음을 입력하십시오:

  1. \conninfo
Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

이는 기본이 아닌 데이터베이스에 연결하거나 기본이 아닌 사용자로 연결하는 경우 유용합니다.

단계 6 — 테이블 생성 및 삭제

이제 PostgreSQL 데이터베이스 시스템에 연결하는 방법을 알았으니, 몇 가지 기본적인 Postgres 관리 작업을 배울 수 있습니다.

테이블을 생성하는 기본 구문은 다음과 같습니다:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

이 명령은 테이블에 이름을 지정하고, 열을 정의하며 열 유형과 필드 데이터의 최대 길이를 정의합니다. 선택적으로 각 열에 제약 조건을 추가할 수 있습니다.

SQL에서 테이블을 생성 및 관리하는 방법에 대한 가이드를 따라 자세히 알아볼 수 있습니다.SQL에서 테이블 생성 및 관리하는 방법을 따르면 테이블 생성에 대해 더 자세히 알 수 있습니다.

시연을 위해 다음 테이블을 생성합니다:

  1. CREATE TABLE playground (
  2. equip_id serial PRIMARY KEY,
  3. type varchar (50) NOT NULL,
  4. color varchar (25) NOT NULL,
  5. location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  6. install_date date
  7. );

이 명령은 놀이터 장비를 인벤토리하는 테이블을 생성합니다. 테이블의 첫 번째 열은 자동으로 증가하는 정수인 serial 유형의 장비 ID 번호를 보유합니다. 이 열은 또한 PRIMARY KEY 제약 조건을 가지며 이는 그 안의 값이 고유하고 null이 아니어야 함을 의미합니다.

다음 두 줄은 각각 장비의 typecolor에 대한 열을 생성합니다. 둘 다 null이 될 수 없습니다. 이들 이후의 줄은 값이 여덟 가지 가능한 값 중 하나여야 하는 location 열을 생성합니다. 마지막 줄은 장비를 설치한 날짜를 기록하는 date 열을 생성합니다.

두 열(equip_idinstall_date) 중 두 개에 대해 명령에서 필드 길이를 지정하지 않습니다. 이유는 일부 데이터 유형이 길이를 설정하지 않아도 되기 때문입니다. 왜냐하면 길이나 형식이 함축적으로 암시되기 때문입니다.

새 테이블을 검사하려면 다음을 입력하십시오:

  1. \d
Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

귀하의 놀이터 테이블이 여기 있지만, playground_equip_id_seq라는 것도 있습니다. 이것은 sequence 유형입니다. 이것은 귀하의 equip_id 열에 제공한 serial 유형의 표현입니다. 이는 순서열의 다음 숫자를 추적하며 이 유형의 열에 대해 자동으로 생성됩니다.

시퀀스 없이 테이블만 보려면 다음을 입력할 수 있습니다:

  1. \dt
Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

테이블이 준비되었으니 데이터 관리를 연습해 봅시다.

단계 7 — 테이블에 데이터 추가, 조회 및 삭제

이제 테이블이 있으므로 일부 데이터를 삽입할 수 있습니다. 예를 들어, 슬라이드와 그네를 추가하려면 추가하려는 테이블을 호출하고 열을 지정한 다음 각 열에 데이터를 제공하여 다음과 같이 하십시오:

  1. INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  2. INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

데이터를 입력할 때 몇 가지 일반적인 문제를 피하기 위해 주의를 기울여야 합니다. 우선, 열 이름을 따옴표로 감싸지 않으나 입력하는 열 값에는 따옴표가 필요합니다.

기억해야 할 또 다른 사항은 equip_id 열에 값이 입력되지 않는다는 것입니다. 이는 테이블에 새로운 행을 추가할 때마다 자동으로 생성되기 때문입니다.

추가한 정보를 검색하려면 다음을 입력하십시오:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

equip_id가 성공적으로 채워졌으며 모든 다른 데이터가 올바르게 정리되었음을 알 수 있습니다.

놀이터의 슬라이드가 망가져서 제거해야 할 경우 테이블에서 해당 행을 제거할 수도 있습니다. 테이블에서 행을 제거하려면 다음을 입력하세요:

  1. DELETE FROM playground WHERE type = 'slide';

테이블을 다시 조회하세요:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

이제 slide 행이 더 이상 테이블의 일부가 아님을 알 수 있습니다.

단계 8 — 테이블에서 열 추가 및 삭제하기

테이블을 생성한 후에는 열을 추가하거나 제거하여 수정할 수 있습니다. 각 장비의 마지막 정비 방문을 나타내는 열을 추가하려면 다음을 입력하세요:

  1. ALTER TABLE playground ADD last_maint date;

테이블 정보를 다시 확인하세요. 새로운 열이 추가되었지만 데이터는 입력되지 않았습니다:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

작업 습간이 유지보수 이력을 별도의 도구로 추적한다는 것을 알게 되면 다음을 입력하여 열을 삭제할 수 있습니다:

  1. ALTER TABLE playground DROP last_maint;

이는 last_maint 열과 해당 값들을 삭제하지만 다른 모든 데이터는 그대로 유지됩니다.

단계 9 — 테이블의 데이터 업데이트

지금까지 테이블에 레코드를 추가하고 삭제하는 방법을 배웠지만, 기존 항목을 수정하는 방법은 아직 다루지 않았습니다.

기존 항목의 값을 업데이트할 수 있습니다. 원하는 레코드를 조회하여 열을 원하는 값으로 설정하면 됩니다. swing 레코드를 조회하여 (이는 테이블에서 모든 스윙과 일치합니다) 그 색상을 빨간색으로 변경할 수 있습니다. 이것은 스윙 세트에 도색을 한 경우에 유용할 수 있습니다:

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

작업이 성공적으로 수행되었는지를 다시 데이터를 조회하여 확인할 수 있습니다:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

슬라이드가 이제 빨간색으로 등록되어 있습니다.

결론

이제 Ubuntu 22.04 서버에 PostgreSQL이 설치되었습니다. Postgres 및 해당 사용법에 대해 더 알고 싶다면 다음 가이드를 확인하는 것을 권장합니다:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-22-04