우분투 20.04에 PostgreSQL을 설치하고 사용하는 방법

소개

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

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

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

디지털오션 관리형 데이터베이스를 사용하여 PostgreSQL 데이터베이스를 1-클릭으로 배포하세요. 데이터베이스의 확장, 유지 관리 및 업그레이드에 대해 디지털오션에게 맡기세요.

전제 조건

이 튜토리얼을 따라하려면 Ubuntu 20.04용 초기 서버 설정 가이드를 따라 구성된 하나의 Ubuntu 20.04 서버가 필요합니다. 이전 선행 튜토리얼을 완료한 후에는 서버에 루트 권한이 없는 사용자와 기본 방화벽이 있어야 합니다.

단계 1 — PostgreSQL 설치

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

최근에 이 작업을 수행하지 않은 경우 서버의 로컬 패키지 인덱스를 새로 고칩니다:

  1. sudo apt update

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

  1. sudo apt install postgresql postgresql-contrib

서버가 실행 중인지 확인하려면 systemctl start 명령을 사용하십시오:

  1. sudo systemctl start postgresql.service

이제 소프트웨어가 설치되고 실행 중이므로 작동 방식과 다른 관계형 데이터베이스 관리 시스템과 어떻게 다를 수 있는지 살펴보겠습니다.

단계 2 — PostgreSQL 롤과 데이터베이스 사용

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

설치시, Postgres는 피어 인증이라는 개념을 사용하여 Postgres 역할을 해당하는 Unix/Linux 시스템 계정과 관련시킵니다. Postgres 내에서 역할이 존재하면 해당 이름을 가진 Unix/Linux 사용자 이름으로 해당 역할로 로그인할 수 있습니다.

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

Postgres에 액세스하기 위해이 계정을 사용하는 몇 가지 방법이 있습니다.

postgres 계정으로 전환

서버에서 postgres 계정으로 전환하려면 다음을 입력하십시오:

  1. sudo -i -u postgres

이제 다음을 입력하여 PostgreSQL 프롬프트에 바로 액세스할 수 있습니다:

  1. psql

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

다음을 입력하여 PostgreSQL 프롬프트에서 나올 수 있습니다:

  1. \q

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

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

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

예를 들어, 마지막 예에서는 먼저 postgres 사용자로 전환한 다음 psql을 실행하여 Postgres 프롬프트에 액세스하라고 지시되었습니다. 이를 sudo를 사용하여 postgres 사용자로 단일 명령 psql을 실행하여 한 단계로 수행할 수 있습니다:

  1. sudo -u postgres psql

이렇게 하면 중간 단계의 bash 쉘이 없이 직접 Postgres에 로그인됩니다.

다시 한 번 강조하지만, 대화형 Postgres 세션을 종료하려면 다음을 입력하십시오:

  1. \q

많은 사용 사례에서는 하나 이상의 Postgres 역할이 필요합니다. 이를 구성하는 방법에 대해 알아보려면 계속 읽으십시오.

단계 3 — 새 역할 생성

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

postgres 계정으로 로그인한 경우 다음을 입력하여 새 사용자를 만들 수 있습니다:

  1. createuser --interactive

대신 일반 계정에서 전환하지 않고 각 명령에 sudo를 사용하려면 다음을 입력하십시오:

  1. sudo -u postgres createuser --interactive

스크립트는 몇 가지 선택지를 제시하고 사용자의 응답에 따라 사용자 지정에 맞는 Postgres 명령을 실행합니다.

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

일부 추가 플래그를 전달하여 더 많은 제어를 얻을 수 있습니다. man 페이지를 참조하여 옵션을 확인하십시오:

  1. man createuser

Postgres 설치에 새 사용자가 추가되었지만 아직 데이터베이스를 추가하지 않았습니다. 다음 섹션에서 이 과정을 설명합니다.

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

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

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

만약 postgres 계정으로 로그인되어 있다면 다음과 같이 입력해야 합니다:

  1. createdb sammy

그 대신에 일반 계정에서 각 명령에 대해 sudo를 사용하려면 다음과 같이 입력해야 합니다:

  1. sudo -u postgres createdb sammy

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

단계 5 — 새 역할로 포스트그레스 프롬프트 열기

피어 인증으로 로그인하려면 포스트그레스 역할 및 데이터베이스와 동일한 이름을 가진 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)
);

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

여기에서 Postgres에서 테이블을 생성하고 관리하는 방법을 더 알아볼 수 있습니다.

실습을 위해 다음 테이블을 생성해 보겠습니다:

  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 번호를 보관하며, 이는 자동으로 증가하는 정수입니다. 이 열은 또한 값이 고유하고 null이 아니어야 한다는 PRIMARY KEY 제약 조건을 가지고 있습니다.

다음 두 줄은 장비 유형색상에 대한 열을 생성합니다. 두 열 모두 비어 있을 수 없습니다. 이후의 줄은 위치 열을 생성하고 값을 여덟 가지 가능한 값 중 하나로 지정하는 제약 조건을 생성합니다. 마지막 줄은 장비를 설치한 날짜를 기록하는 날짜 열을 생성합니다.

두 열(장비 ID설치 날짜) 중 두 개의 열에 대해 명령어는 필드 길이를 지정하지 않습니다. 이는 일부 데이터 유형이 길이나 형식이 암시되어 있기 때문에 설정된 길이가 필요하지 않기 때문입니다.

새로운 테이블을 보려면 다음을 입력하세요:

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

여기에 플레이그라운드 테이블이 있지만, 장비 ID 시퀀스라는 것도 있습니다. 이는 시리얼 유형의 표현이며, 장비 ID 열에 제공한 유형입니다. 이는 시퀀스의 다음 번호를 추적하며, 이 유형의 열에 대해 자동으로 생성됩니다.

시퀀스 없이 테이블만 보려면 다음을 입력하세요:

  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 레코드를 쿼리하여 해당 색상을 red로 변경할 수 있습니다. 이것은 그네 세트에 도색 작업을 수행했을 때 유용할 수 있습니다:

  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 20.04 서버에 PostgreSQL을 설정했습니다. Postgres 및 사용 방법에 대해 더 알고 싶다면 다음 가이드를 확인하는 것을 권장합니다:

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