본문 바로가기
프로그래밍/TimescaleDB | PostgreSQL

Linux에 TimescaleDB 설치하기

by 남생 namsaeng 2022. 3. 14.
반응형

TimescaleDB는 시계열 데이터 타입을 처리할 수 있는 오픈소스 데이터베이스 관리 시스템이다. BSD 계열인 Apache License 2.0이기 때문에, 이 데이터베이스를 사용하는 애플리케이션은 소스코드의 공개 의무를 갖지 않는다.

 

대표적인 시계열(Time-series) DBMSInfluxDBTimescaleDB가 있으며, 둘의 차이점은 다음과 같다.

 

  • 리소스(디스크, 메모리) 사용량 및 성능에서, cardinality가 높을수록(중복도가 낮은 경우) TimescaleDB가 좋고 cardinality가 낮을수록(중복도가 높은 경우) InfluxDB가 좋다.
  • 메모리 부족 및 높은 cardinality에서는 InfluxDB에서 안정성 문제가 발생할 수 있다.
  • 복잡한 질의 및 데이터의 변경이 자주 일어나면 TimescaleDB가 좋다.
  • InfluxDB는 BLOB(Binary Large Object) 데이터타입을 다루지 않지만, TimescaleDB에서는 bytea 형태로 BLOB를 다룬다.

 

내가 진행하고 있는 프로젝트가 BLOB를 다루어야 하는 상황이기 때문에 TimescaleDB를 사용하기로 했다.

 

 

1. 운영환경

  • Redhat Enterprise Linux 8
  • PostgreSQL 14

 

2. 설치

  • TimescaleDB는 PostgreSQL을 기반으로 돌아가기 때문에 PostgreSQL이 설치되어 있어야 한다.
  • 설치 가이드라인에서 #는 root 로그인, $는 local user 로그인 상태를 의미한다.

1) PostgreSQL 설치확인

 

# yum list installed | grep postgresql

 

postgresql11.x86_64 11.15-1PGDG.rhel8 @pgdg11

postgresql11-libs.x86_64 11.15-1PGDG.rhel8 @pgdg11

postgresql11-server.x86_64 11.15-1PGDG.rhel8 @pgdg11

postgresql14.x86_64 14.2-1PGDG.rhel8 @pgdg14

postgresql14-libs.x86_64 14.2-1PGDG.rhel8 @pgdg14

postgresql14-server.x86_64 14.2-1PGDG.rhel8 @pgdg14

timescaledb-2-loader-postgresql-11.x86_64 2.3.1-0.el8 @timescale_timescaledb

timescaledb-2-loader-postgresql-14.x86_64 2.6.0-0.el8 @timescale_timescaledb

timescaledb-2-postgresql-14.x86_64 2.6.0-0.el8

 

  • 기존 설치된 DBMS와 충돌이 일어날 수 있어서 필요가 없다면 지우고 시작합니다.

 

# yum remove postgresql11-server

# yum remove postgresql14-server

 

2) PostgreSQL 14 설치

 

$  sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

$ sudo dnf -qy module disable postgresql

$ sudo dnf install -y postgresql14-server

$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

$ sudo systemctl enable postgresql-14

$ sudo systemctl start postgresql-14

 

3) TimescaleDB 14 설치

 

# dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm –E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm

 

# tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL

[timescale_timescaledb]

name=timescale_timescaledb

baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch

repo_gpgcheck=1

gpgcheck=0

enabled=1

gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey

sslverify=1

sslcacert=/etc/pki/tls/certs/ca-bundle.crt

metadata_expire=300

EOL

 

// 위의 구문이 끝나고 실제로 /etc/yum.repos.d/timescale_timescaledb.repo에 내용 작성이 되어있는지 확인한다. 작성이 안 되어 있으면 vi편집기로 넣어준다.

 

# dnf update

 

# dnf install timescaledb-2-postgresql-14

 

4) TimescaleDB toolkit 14 설치

 

# dnf install timescaledb-toolkit-postgresql-14

 

 

5) 환경설정

  • 호스트명을 postgres로 변경

# hostnamectl set-hostname postgres

  • 방화벽 해제

# firewall-cmd --zone=public --add-port=5432/tcp --permanent

# firewall-cmd --reload

 

6) postgres 비밀번호 설정

[root@postgres data]# su – postgres// root 접속 후에 명령 실행

[postgres@postgres ~]$ psql

psql (14.2)

도움말을 보려면 "help"를 입력하십시오.

postgres=# \password

Enter new password for user "postgres":

다시 입력해 주세요:

postgres=#

 

 

7) PostgreSQL 접속 후 TimescaleDB 적용

$ psql -U postgres –h localhost –p 5432

Password for user postgres :

Type "help" for help.

postgres=# CREATE database example; // example 데이터베이스 생성

 

postgres=# \l // 데이터베이스 목록 확인

List of databases

Name | Owner | Encoding | Collate | Ctype | Access privileges

-----------+----------+----------+------------+------------+-----------------------

example | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 |

postgres | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 |

template0 | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 | =c/postgres +

| | | | | postgres=CTc/postgres

template1 | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 | =c/postgres +

| | | | | postgres=CTc/postgres

(4 rows)

 

 

postgres=# \c example // example 데이터베이스 선택

 

postgres=# CREATE EXTENSION IF NOT EXISTS timescaledb; // example 데이터베이스에 TimescaleDB 적용

 

example=# \dx

Name | Version | Schema |

Description

---------------------+---------+------------+-----------------------------------

----------------------------------------------------

plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language

timescaledb | 2.6.0 | public | Enables scalable inserts and compl

ex queries for time-series data

 

8) 설치한 Toolkit 적용

example=# CREATE EXTENSION timescaledb_toolkit;

 

Name | Version | Schema |

Description

---------------------+---------+------------+-----------------------------------

----------------------------------------------------

plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language

timescaledb | 2.6.0 | public | Enables scalable inserts and compl

ex queries for time-series data

timescaledb_toolkit | 1.5.2 | public | Library of analytical hyperfunctio

ns, time-series pipelining, and other SQL utilities

(3 rows)

 

 

9) 예제 테이블 생성

example=# create table hi(a int, b int);

CREATE TABLE

 

10) 예제 테이블 스키마 컬럼 정보 조회

example=# select column_name, data_type from information_schema.columns where table_name = 'hi';

 column_name |          data_type          
-------------+-----------------------------
 a       | integer
 b       | integer
(2 rows)

 

11) 예제 데이터 삽입

example=# insert into hi(a,b) values(1,2);

INSERT 0 1

 

12) 예제 데이터 조회

example=# select * from hi;

a | b

---+---

1 | 2

(1 row)

 

 

 

 

 

  • Linux에 기본적인 TimescaleDB 설치를 완료했고 테이블 생성 및 데이터 삽입과 조회를 테스트해봤다.

 

TimescaleDB

반응형

댓글