Ubuntu 16.04에서 PostgreSQL을 설치하고 사용하는 방법
소개
관계형 데이터베이스 관리 시스템은 많은 웹 사이트 및 응용 프로그램의 핵심 구성 요소입니다. 정보를 저장, 구성 및 액세스하는 구조화된 방법을 제공합니다.
PostgreSQL 또는 Postgres는 SQL 쿼리 언어 구현을 제공하는 관계형 데이터베이스 관리 시스템입니다. 많은 크고 작은 프로젝트에서 널리 사용되는 선택이며 표준을 준수하고 읽기 잠금이 없는 안정적인 트랜잭션 및 동시성과 같은 많은 고급 기능이 있다는 이점이 있습니다.
이 가이드에서는 Ubuntu 16.04 VPS 인스턴스에 Postgres를 설치하는 방법을 시연하고 이를 사용하는 몇 가지 기본 방법을 살펴봅니다.
설치
Ubuntu의 기본 리포지토리에는 Postgres 패키지가 포함되어 있으므로 apt
패키징 시스템을 사용하여 쉽게 설치할 수 있습니다.
이 세션에서 apt
를 처음 사용하므로 로컬 패키지 인덱스를 새로 고쳐야 합니다. 그런 다음 몇 가지 추가 유틸리티와 기능을 추가하는 Postgres 패키지와 -contrib
패키지를 설치할 수 있습니다.
- sudo apt-get update
- 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
계정으로 전환합니다.
- sudo -i -u postgres
이제 다음을 입력하여 Postgres 프롬프트에 즉시 액세스할 수 있습니다.
- psql
로그인하면 바로 데이터베이스 관리 시스템과 상호 작용할 수 있습니다.
다음을 입력하여 PostgreSQL 프롬프트를 종료합니다.
- \q
이제 postgres
Linux 명령 프롬프트로 돌아와야 합니다.
계정 전환 없이 Postgres 프롬프트에 액세스
sudo
를 사용하여 직접 postgres
계정으로 원하는 명령을 실행할 수도 있습니다.
예를 들어, 마지막 예에서 우리는 Postgres 프롬프트에 도달하기를 원했습니다. 다음과 같이 sudo
를 사용하여 postgres
사용자로 단일 명령 psql
을 실행하여 이 작업을 한 번에 수행할 수 있습니다.
- sudo -u postgres psql
이렇게 하면 중간 bash
셸 없이 Postgres에 직접 로그인됩니다.
다시 말하지만 다음을 입력하여 대화형 Postgres 세션을 종료할 수 있습니다.
- \q
새 역할 만들기
현재 데이터베이스 내에 구성된 postgres
역할만 있습니다. createrole
명령을 사용하여 명령줄에서 새 역할을 만들 수 있습니다. --interactive
플래그는 필요한 값을 묻는 메시지를 표시합니다.
postgres
계정으로 로그인한 경우 다음을 입력하여 새 사용자를 만들 수 있습니다.
- createuser --interactive
대신 일반 계정에서 전환하지 않고 각 명령에 대해 sudo
를 사용하려는 경우 다음을 입력할 수 있습니다.
- sudo -u postgres createuser --interactive
스크립트는 몇 가지 선택 사항을 묻는 메시지를 표시하고 응답에 따라 올바른 Postgres 명령을 실행하여 사양에 맞는 사용자를 생성합니다.
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
몇 가지 추가 플래그를 전달하여 더 많은 제어를 얻을 수 있습니다. man
페이지를 보고 옵션을 확인하십시오.
- man createuser
새 데이터베이스 만들기
기본적으로 Postgres 인증 시스템이 만드는 또 다른 가정은 로그인에 사용되는 역할과 동일한 이름을 가진 데이터베이스가 있고 역할이 액세스할 수 있다는 것입니다.
따라서 마지막 섹션에서 sammy
라는 사용자를 만든 경우 해당 역할은 다음을 통해 sammy
라고도 하는 데이터베이스에 연결을 시도합니다. 기본. createdb
명령으로 적절한 데이터베이스를 생성할 수 있습니다.
postgres
계정으로 로그인한 경우 다음과 같이 입력합니다.
- createdb sammy
대신 일반 계정에서 전환하지 않고 각 명령에 대해 sudo
를 사용하려면 다음을 입력합니다.
- sudo -u postgres createdb sammy
새 역할로 Postgres 프롬프트 열기
ident
기반 인증으로 로그인하려면 Postgres 역할 및 데이터베이스와 동일한 이름을 가진 Linux 사용자가 필요합니다.
일치하는 Linux 사용자가 없는 경우 adduser
명령을 사용하여 만들 수 있습니다. sudo
권한이 있는 계정에서 이 작업을 수행해야 합니다(postgres
사용자로 로그인하지 않음).
- sudo adduser sammy
사용 가능한 적절한 계정이 있으면 다음을 입력하여 전환하고 데이터베이스에 연결할 수 있습니다.
- sudo -i -u sammy
- psql
또는 다음과 같이 인라인으로 수행할 수 있습니다.
- sudo -u sammy psql
모든 구성 요소가 올바르게 구성되었다고 가정하면 자동으로 로그인됩니다.
사용자가 다른 데이터베이스에 연결하도록 하려면 다음과 같이 데이터베이스를 지정하면 됩니다.
- psql -d postgres
로그인하면 다음을 입력하여 현재 연결 정보를 확인할 수 있습니다.
- \conninfo
OutputYou 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_id
및 install_date
)에 대해 필드 길이를 지정하지 않았습니다. 일부 컬럼 유형은 길이가 유형에 의해 암시되기 때문에 설정된 길이가 필요하지 않기 때문입니다.
그런 다음 장비 유형
및 색상
에 대한 열을 제공하며 각 항목은 비워둘 수 없습니다. location
열을 생성하고 값이 8개의 가능한 값 중 하나여야 하는 제약 조건을 생성합니다. 마지막 열은 장비를 설치한 날짜를 기록하는 날짜 열입니다.
다음을 입력하여 새 테이블을 볼 수 있습니다.
- \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
유형의 표현입니다. 이것은 시퀀스의 다음 번호를 추적하고 이 유형의 열에 대해 자동으로 생성됩니다.
시퀀스 없이 테이블만 보려면 다음을 입력할 수 있습니다.
- \dt
Output List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
테이블에서 데이터 추가, 쿼리 및 삭제
이제 테이블이 있으므로 일부 데이터를 테이블에 삽입할 수 있습니다.
슬라이드와 그네를 추가해 보겠습니다. 추가하려는 테이블을 호출하고 열 이름을 지정한 다음 각 열에 대한 데이터를 제공하여 이 작업을 수행합니다. 슬라이드와 스윙을 다음과 같이 추가할 수 있습니다.
- INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28');
- INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');
몇 가지 일반적인 중단을 피하기 위해 데이터를 입력할 때 주의해야 합니다. 먼저, 열 이름을 따옴표로 묶어서는 안 되지만 입력하는 열 값에는 따옴표가 필요하다는 점에 유의하세요.
명심해야 할 또 다른 사항은 equip_id
열에 대한 값을 입력하지 않는다는 것입니다. 이는 테이블에 새 행이 생성될 때마다 자동으로 생성되기 때문입니다.
그런 다음 다음을 입력하여 추가한 정보를 다시 가져올 수 있습니다.
- 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
가 성공적으로 채워졌고 다른 모든 데이터가 올바르게 구성되었음을 확인할 수 있습니다.
놀이터의 슬라이드가 끊어져 제거해야 하는 경우 다음을 입력하여 테이블에서 행을 제거할 수도 있습니다.
- DELETE FROM playground WHERE type = 'slide';
테이블을 다시 쿼리하면 슬라이드가 더 이상 테이블의 일부가 아님을 알 수 있습니다.
- SELECT * FROM playground;
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2010-08-16
(1 row)
테이블에서 열을 추가하고 삭제하는 방법
추가 열을 추가하기 위해 테이블을 만든 후 테이블을 수정하려는 경우 쉽게 수행할 수 있습니다.
다음을 입력하여 각 장비에 대한 마지막 유지 관리 방문을 표시하는 열을 추가할 수 있습니다.
- ALTER TABLE playground ADD last_maint date;
테이블 정보를 다시 보면 새 열이 추가된 것을 볼 수 있습니다(그러나 입력된 데이터는 없습니다).
- SELECT * FROM playground;
Output equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2010-08-16 |
(1 row)
열을 쉽게 삭제할 수 있습니다. 작업 팀이 별도의 도구를 사용하여 유지 관리 기록을 추적하는 경우 다음을 입력하여 여기에 열을 제거할 수 있습니다.
- ALTER TABLE playground DROP last_maint;
테이블에서 데이터를 업데이트하는 방법
테이블에 레코드를 추가하고 삭제하는 방법은 알고 있지만 기존 항목을 수정하는 방법은 아직 다루지 않았습니다.
원하는 레코드를 쿼리하고 사용하려는 값으로 열을 설정하여 기존 항목의 값을 업데이트할 수 있습니다. "swing\ 레코드를 쿼리하고(이는 테이블의 모든 스윙과 일치함) 색상을 "red\로 변경할 수 있습니다. 이것은 스윙 세트에 페인트 작업을 제공한 경우에 유용할 수 있습니다.
- UPDATE playground SET color = 'red' WHERE type = 'swing';
데이터를 다시 쿼리하여 작업이 성공했는지 확인할 수 있습니다.
- 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 데이터베이스 백업 방법 알아보기