웹사이트 검색

Ubuntu 16.04에서 PostgreSQL을 설치하고 사용하는 방법


소개

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

PostgreSQL 또는 Postgres는 SQL 쿼리 언어 구현을 제공하는 관계형 데이터베이스 관리 시스템입니다. 많은 크고 작은 프로젝트에서 널리 사용되는 선택이며 표준을 준수하고 읽기 잠금이 없는 안정적인 트랜잭션 및 동시성과 같은 많은 고급 기능이 있다는 이점이 있습니다.

이 가이드에서는 Ubuntu 16.04 VPS 인스턴스에 Postgres를 설치하는 방법을 시연하고 이를 사용하는 몇 가지 기본 방법을 살펴봅니다.

설치

Ubuntu의 기본 리포지토리에는 Postgres 패키지가 포함되어 있으므로 apt 패키징 시스템을 사용하여 쉽게 설치할 수 있습니다.

이 세션에서 apt를 처음 사용하므로 로컬 패키지 인덱스를 새로 고쳐야 합니다. 그런 다음 몇 가지 추가 유틸리티와 기능을 추가하는 Postgres 패키지와 -contrib 패키지를 설치할 수 있습니다.

  1. sudo apt-get update
  2. sudo apt-get install postgresql postgresql-contrib

이제 소프트웨어가 설치되었으므로 작동 방식과 사용했던 유사한 데이터베이스 관리 시스템과 어떻게 다른지 살펴볼 수 있습니다.

PostgreSQL 역할 및 데이터베이스 사용

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

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

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

postgres 계정으로 전환

설치 절차는 기본 Postgres 역할과 연결된 postgres라는 사용자 계정을 생성했습니다. Postgres를 사용하기 위해 해당 계정에 로그인할 수 있습니다.

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

  1. sudo -i -u postgres

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

  1. psql

로그인하면 바로 데이터베이스 관리 시스템과 상호 작용할 수 있습니다.

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

  1. \q

이제 postgres Linux 명령 프롬프트로 돌아와야 합니다.

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

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

예를 들어, 마지막 예에서 우리는 Postgres 프롬프트에 도달하기를 원했습니다. 다음과 같이 sudo를 사용하여 postgres 사용자로 단일 명령 psql을 실행하여 이 작업을 한 번에 수행할 수 있습니다.

  1. sudo -u postgres psql

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

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

  1. \q

새 역할 만들기

현재 데이터베이스 내에 구성된 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 인증 시스템이 만드는 또 다른 가정은 로그인에 사용되는 역할과 동일한 이름을 가진 데이터베이스가 있고 역할이 액세스할 수 있다는 것입니다.

따라서 마지막 섹션에서 sammy라는 사용자를 만든 경우 해당 역할은 다음을 통해 sammy라고도 하는 데이터베이스에 연결을 시도합니다. 기본. createdb 명령으로 적절한 데이터베이스를 생성할 수 있습니다.

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

  1. createdb sammy

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

  1. sudo -u postgres createdb sammy

새 역할로 Postgres 프롬프트 열기

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

일치하는 Linux 사용자가 없는 경우 adduser 명령을 사용하여 만들 수 있습니다. sudo 권한이 있는 계정에서 이 작업을 수행해야 합니다(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".

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

테이블 생성 및 삭제

이제 PostgreSQL 데이터베이스 시스템에 연결하는 방법을 알았으므로 몇 가지 기본 작업을 완료하는 방법을 살펴보겠습니다.

먼저 일부 데이터를 저장할 테이블을 만들 수 있습니다. 놀이기구를 설명하는 표를 만들어 봅시다.

이 명령의 기본 구문은 다음과 같습니다.

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에서 테이블을 만들고 관리하는 방법에 대해 자세히 알아볼 수 있습니다.

우리의 목적을 위해 다음과 같은 간단한 테이블을 만들 것입니다.

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

우리는 우리가 가지고 있는 장비의 목록을 작성하는 놀이터 테이블을 만들었습니다. 이것은 serial 유형의 장비 ID로 시작합니다. 이 데이터 유형은 자동 증가 정수입니다. 우리는 이 열에 기본 키의 제약 조건을 부여했습니다. 이는 값이 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)

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

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

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

테이블에서 데이터 추가, 쿼리 및 삭제

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

슬라이드와 그네를 추가해 보겠습니다. 추가하려는 테이블을 호출하고 열 이름을 지정한 다음 각 열에 대한 데이터를 제공하여 이 작업을 수행합니다. 슬라이드와 스윙을 다음과 같이 추가할 수 있습니다.

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

몇 가지 일반적인 중단을 피하기 위해 데이터를 입력할 때 주의해야 합니다. 먼저, 열 이름을 따옴표로 묶어서는 안 되지만 입력하는 열 에는 따옴표가 필요하다는 점에 유의하세요.

명심해야 할 또 다른 사항은 equip_id 열에 대한 값을 입력하지 않는다는 것입니다. 이는 테이블에 새 행이 생성될 때마다 자동으로 생성되기 때문입니다.

그런 다음 다음을 입력하여 추가한 정보를 다시 가져올 수 있습니다.

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2014-04-28 2 | swing | yellow | northwest | 2010-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 | 2010-08-16 (1 row)

테이블에서 열을 추가하고 삭제하는 방법

추가 열을 추가하기 위해 테이블을 만든 후 테이블을 수정하려는 경우 쉽게 수행할 수 있습니다.

다음을 입력하여 각 장비에 대한 마지막 유지 관리 방문을 표시하는 열을 추가할 수 있습니다.

  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 | 2010-08-16 | (1 row)

열을 쉽게 삭제할 수 있습니다. 작업 팀이 별도의 도구를 사용하여 유지 관리 기록을 추적하는 경우 다음을 입력하여 여기에 열을 제거할 수 있습니다.

  1. ALTER TABLE playground DROP last_maint;

테이블에서 데이터를 업데이트하는 방법

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

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

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

결론

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

  • 관계형 데이터베이스 관리 시스템 비교
  • Postgres로 테이블을 만들고 관리하는 방법 알아보기
  • 역할 및 권한 관리 능력 향상
  • Select로 Postgres로 쿼리 작성
  • PostgreSQL 보안 방법 알아보기
  • Postgres 데이터베이스 백업 방법 알아보기