웹사이트 검색

Rocky Linux 9에서 PostgreSQL을 설치하고 사용하는 방법


소개

관계형 데이터베이스 관리 시스템은 많은 웹 사이트 및 응용 프로그램의 핵심 구성 요소입니다. 정보를 저장, 구성 및 액세스하는 구조화된 방법을 제공합니다.

읽기 잠금이 없는 동시성.

이 가이드에 따라 Rocky Linux 9 서버에 최신 버전의 PostgreSQL을 설치하게 됩니다.

전제 조건

이 튜토리얼을 완료하려면 Rocky Linux 9를 실행하는 서버가 필요합니다. 이 서버에는 관리 권한이 있는 루트가 아닌 사용자와 firewalld로 구성된 방화벽이 있어야 합니다. 이를 설정하려면 Rocky Linux 9용 초기 서버 설정 가이드를 참조하십시오.

1단계 - PostgreSQL 설치

PostgreSQL은 Rocky Linux의 기본 소프트웨어 저장소에서 사용할 수 있으며 Rocky의 패키지 관리자인 dnf로 설치할 수 있습니다. Postgres의 다국어 지원을 개선하려면 glibc-all-langpacks라는 다른 패키지도 동시에 설치해야 합니다. dnf install을 사용하여 둘 다 설치합니다.

  1. sudo dnf install postgresql-server glibc-all-langpacks

프롬프트가 표시되면 y를 누른 다음 ENTER를 눌러 설치를 확인합니다.

기본적으로 Rocky Linux 9는 PostgreSQL 버전 13을 설치합니다. 이제 소프트웨어가 설치되었으므로 몇 가지 초기화 단계를 수행하여 PostgreSQL용 새 데이터베이스 클러스터를 준비합니다.

2단계 - 새 PostgreSQL 데이터베이스 클러스터 생성

테이블 생성 및 데이터 로드를 시작하려면 먼저 새로운 PostgreSQL 데이터베이스 클러스터를 생성해야 합니다. 데이터베이스 클러스터는 단일 서버 인스턴스에서 관리하는 데이터베이스 모음입니다. 데이터베이스 클러스터 생성은 데이터베이스 데이터가 배치될 디렉토리 생성, 공유 카탈로그 테이블 생성, template1postgres 데이터베이스 생성으로 구성됩니다.

template1 데이터베이스는 새 데이터베이스를 만드는 데 사용되는 일종의 템플릿입니다. template1에 저장된 모든 것, 심지어 직접 추가한 개체도 생성 시 새 데이터베이스에 배치됩니다. postgres 데이터베이스는 사용자, 유틸리티 및 타사 응용 프로그램에서 사용하도록 설계된 기본 데이터베이스입니다.

이전 단계에서 설치한 Postgres 패키지는 저수준 데이터베이스 클러스터 관리에 도움이 되는 postgresql-setup이라는 편리한 스크립트와 함께 제공됩니다. 데이터베이스 클러스터를 생성하려면 sudo--initdb 옵션을 사용하여 스크립트를 실행합니다.

  1. sudo postgresql-setup --initdb

다음 출력이 표시됩니다.

Output
* Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

이제 systemctl을 사용하여 PostgreSQL 서비스를 시작합니다.

  1. sudo systemctl start postgresql

그런 다음 systemctl을 한 번 더 사용하여 서버가 부팅될 때마다 서비스가 시작되도록 합니다.

  1. sudo systemctl enable postgresql

이것은 다음과 같은 출력을 줄 것입니다

Output
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.

이제 PostgreSQL이 실행 중이므로 역할 사용을 통해 Postgres가 작동하는 방식과 Postgres가 과거에 사용했던 유사한 데이터베이스 관리 시스템과 어떻게 다른지 알아볼 것입니다.

3단계 - PostgreSQL 역할 및 데이터베이스 사용

PostgreSQL은 역할이라는 개념을 사용하여 클라이언트 인증 및 승인을 처리합니다. 이는 일반 Unix 스타일 계정과 어떤 면에서 유사하지만 Postgres는 사용자와 그룹을 구분하지 않고 대신 더 유연한 용어 역할을 선호합니다.

설치 시 Postgres는 ident 인증을 사용하도록 설정됩니다. 즉, Postgres 역할을 일치하는 Unix/Linux 시스템 계정과 연결합니다. Postgres 내에 역할이 있는 경우 동일한 이름의 Unix/Linux 사용자 이름이 해당 역할로 로그인할 수 있습니다.

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

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

postgres 계정으로 전환

다음을 입력하여 서버에서 postgres 계정으로 전환하십시오.

  1. sudo -i -u postgres

이제 다음을 입력하여 Postgres 프롬프트에 즉시 액세스할 수 있습니다.

  1. psql

이렇게 하면 PostgreSQL 프롬프트에 로그인되며 여기에서 데이터베이스 관리 시스템과 즉시 자유롭게 상호 작용할 수 있습니다.

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

  1. \q

이렇게 하면 postgres 계정의 Linux 명령 프롬프트로 돌아갑니다. 이제 다음과 같이 원래 계정으로 돌아갑니다.

  1. exit

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

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

예를 들어 이전 예에서 먼저 postgres 사용자로 전환한 다음 psql을 실행하여 Postgres 프롬프트를 열어 Postgres 프롬프트에 액세스하라는 지시를 받았습니다. 대안으로 다음과 같이 sudo를 사용하여 postgres 사용자로 단일 명령 psql을 실행하여 이 작업을 한 번에 수행할 수 있습니다.

  1. sudo -u postgres psql

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

다시 말하지만 다음을 입력하여 대화형 Postgres 세션을 종료할 수 있습니다.

  1. \q

이 단계에서는 postgres 계정을 사용하여 psql 프롬프트에 도달했습니다. 그러나 많은 사용 사례에는 둘 이상의 Postgres 역할이 필요합니다. 새 역할을 구성하는 방법을 알아보려면 계속 읽으십시오.

4단계 - 새 역할 만들기

현재 데이터베이스 내에 구성된 postgres 역할만 있습니다. createrole 명령을 사용하여 명령줄에서 새 역할을 만들 수 있습니다. --interactive 플래그는 새 역할의 이름을 묻는 메시지를 표시하고 수퍼유저 권한이 있어야 하는지 여부도 묻습니다.

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

  1. createuser --interactive

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

  1. sudo -u postgres createuser --interactive

스크립트는 몇 가지 선택 사항을 묻는 메시지를 표시하고 응답에 따라 필요한 Postgres 명령을 실행하여 사양에 맞는 사용자를 생성합니다. 이 자습서에서는 sammy라는 역할을 만들고 메시지가 표시되면 y를 입력하여 수퍼유저 권한을 부여합니다.

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

몇 가지 추가 플래그를 전달하여 더 많은 제어를 얻을 수 있습니다. createuser에 대한 man 페이지를 보고 옵션을 확인하십시오.

  1. man createuser

이제 Postgres 설치에 새 역할이 부여되었지만 아직 데이터베이스를 추가하지 않았습니다. 다음 섹션에서는 이 프로세스를 설명합니다.

5단계 - 새 데이터베이스 생성

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

즉, 이전 섹션에서 만든 사용자가 sammy인 경우 해당 역할은 기본적으로 sammy라고도 하는 데이터베이스에 연결을 시도합니다. createdb 명령을 사용하여 이러한 데이터베이스를 만들 수 있습니다.

postgres 계정으로 로그인한 경우 다음과 같이 입력합니다.

  1. createdb sammy

대신 일반 계정에서 전환하지 않고 각 명령에 대해 sudo를 사용하려면 다음을 입력합니다.

  1. sudo -u postgres createdb sammy

이러한 유연성은 필요에 따라 데이터베이스를 생성하기 위한 여러 경로를 제공합니다.

이제 새 데이터베이스를 만들었으므로 새 역할로 로그인합니다.

6단계 - 새 역할로 Postgres 프롬프트 열기

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

일치하는 Linux 사용자가 없는 경우 adduser 명령을 사용하여 만들 수 있습니다. sudo 권한(즉, postgres 사용자로 로그인하지 않음)이 있는 루트가 아닌 계정에서 이 작업을 수행해야 합니다.

  1. sudo adduser sammy

이 새 계정을 사용할 수 있게 되면 전환한 다음 먼저 다음을 입력하여 데이터베이스에 연결할 수 있습니다.

  1. sudo -i -u sammy
  2. psql

또는 다음과 같이 인라인으로 수행할 수 있습니다.

  1. sudo -u sammy psql

이 명령은 자동으로 로그인됩니다.

사용자가 다른 데이터베이스에 연결하도록 하려면 다음과 같이 -d 플래그를 포함하고 데이터베이스를 지정하면 됩니다.

  1. psql -d sammy

로그인하면 다음을 입력하여 현재 연결 정보를 확인할 수 있습니다.

  1. \conninfo

그러면 다음 출력이 표시됩니다.

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

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

데이터베이스에 연결했으면 이제 테이블 생성 및 삭제를 시도할 수 있습니다.

7단계 - 테이블 생성 및 삭제

이제 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)
);

이러한 명령은 테이블에 이름을 지정한 다음 열 유형과 필드 데이터의 최대 길이뿐만 아니라 열을 정의합니다. 선택적으로 각 열에 대한 테이블 제약 조건을 추가할 수도 있습니다.

데모용으로 다음과 같은 테이블을 만듭니다.

  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이 아닌 고유해야 함을 의미합니다.

열 중 두 개(equip_idinstall_date)에 대해 명령은 필드 길이를 지정하지 않습니다. 일부 컬럼 유형은 길이가 유형에 의해 암시되기 때문에 설정된 길이가 필요하지 않기 때문입니다.

다음 두 줄은 각각 비워 둘 수 없는 장비 유형색상에 대한 열을 생성합니다. 이 다음 줄은 location 열과 값이 8개의 가능한 값 중 하나여야 하는 제약 조건을 만듭니다. 마지막 줄은 장비를 설치한 날짜를 기록하는 날짜 열을 만듭니다.

다음을 입력하여 새 테이블을 볼 수 있습니다.

  1. \d

그러면 다음 출력이 표시됩니다.

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

플레이그라운드 테이블이 여기에 있지만 sequence 유형의 playground_equip_id_seq라는 항목도 있습니다. 이것은 equip_id 열에 제공한 serial 유형의 표현입니다. 이것은 시퀀스의 다음 번호를 추적하고 이 유형의 열에 대해 자동으로 생성됩니다.

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

  1. \dt

그러면 다음이 생성됩니다.

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

이 단계에서는 샘플 테이블을 생성했습니다. 다음 단계에서는 해당 테이블에서 항목을 추가, 쿼리 및 삭제해 봅니다.

8단계 - 테이블에서 데이터 추가, 쿼리 및 삭제

이제 테이블이 있으므로 일부 데이터를 테이블에 삽입할 수 있습니다.

예를 들어 다음과 같이 추가하려는 테이블을 호출하고 열 이름을 지정한 다음 각 열에 대한 데이터를 제공하여 슬라이드와 스윙을 추가합니다.

  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)

슬라이드는 더 이상 테이블의 일부가 아닙니다.

이제 테이블에 항목을 추가하고 삭제했으므로 열을 추가하고 삭제할 수 있습니다.

9단계 - 테이블에서 열 추가 및 삭제

테이블을 생성한 후 테이블을 수정하여 열을 추가하거나 제거할 수 있습니다. 다음을 입력하여 각 장비에 대한 마지막 유지 관리 방문을 표시하는 열을 추가합니다.

  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 열과 그 안에 있는 모든 값이 삭제되지만 다른 모든 데이터는 그대로 유지됩니다.

이제 열을 추가하고 삭제했으면 마지막 단계에서 기존 데이터 업데이트를 시도할 수 있습니다.

10단계 - 테이블의 데이터 업데이트

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

원하는 레코드를 쿼리하고 사용하려는 값으로 열을 설정하여 기존 항목의 값을 업데이트할 수 있습니다. 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 | 2010-08-16 (1 row)

보시다시피 이제 슬라이드가 빨간색으로 등록되었습니다.

결론

이제 Rocky Linux 9 서버에서 PostgreSQL로 설정되었습니다. 그러나 여전히 Postgres로 배울 것이 훨씬 더 많습니다. 다음은 Postgres 사용 방법을 다루는 추가 가이드입니다.

  • 관계형 데이터베이스 관리 시스템 비교
  • PostgreSQL에서 쿼리 실행에 대해 알아보기