Thêm Repository chính thức của TimescaleDB
Để cài đặt phiên bản mới nhất và nhận các bản cập nhật bảo mật tự động, bạn cần thêm repository chính thức của TimescaleDB vào hệ thống Ubuntu 24.04.
Bước này tải xuống key GPG để xác thực gói phần mềm, sau đó thêm file repository vào danh sách nguồn của apt.
Chạy các lệnh sau để tải key và cấu hình source:
curl -fsSL https://packages.timescale.com/debian/gpgkeys | sudo gpg --dearmor -o /usr/share/keyrings/timescale.gpg
Kết quả mong đợi: Không có thông báo lỗi (silent success), file key được tạo tại đường dẫn chỉ định.
echo "deb [signed-by=/usr/share/keyrings/timescale.gpg] https://packages.timescale.com/debian stable main" | sudo tee /etc/apt/sources.list.d/timescale.list
Kết quả mong đợi: Nội dung dòng repository được ghi vào file `/etc/apt/sources.list.d/timescale.list`.
Để hệ thống nhận diện gói mới, bạn cần cập nhật lại bảng chỉ mục gói phần mềm.
sudo apt update
Kết quả mong đợi: Dòng đầu tiên trong output hiển thị "Get: [URL] InRelease" từ sources.list.d/timescale.list, không có lỗi 404 hay signature error.
Cài đặt gói TimescaleDB cho PostgreSQL 16
Ubuntu 24.04 mặc định sử dụng PostgreSQL 16. Bạn cần cài đặt gói extension tương thích chính xác với phiên bản này để đảm bảo tính ổn định.
Chạy lệnh cài đặt gói `timescaledb-2-postgresql-16`. Gói này sẽ tự động kéo theo các dependency cần thiết của PostgreSQL 16.
sudo apt install timescaledb-2-postgresql-16
Kết quả mong đợi: Hệ thống hỏi xác nhận (Y/n), sau đó hiển thị trạng thái "Setting up timescaledb-2-postgresql-16 (2.x.x)" thành công.
Sau khi cài đặt, bạn cần cập nhật lại file cấu hình của PostgreSQL để đảm bảo extension được tải đúng cách khi khởi động lại dịch vụ.
Mở file cấu hình `postgresql.conf` của phiên bản 16:
sudo nano /etc/postgresql/16/main/postgresql.conf
Tìm dòng `shared_preload_libraries` (thường ở gần cuối file, mặc định là `#shared_preload_libraries = '...'`).
Thay đổi dòng này thành nội dung sau (bỏ dấu `#` ở đầu):
shared_preload_libraries = 'timescaledb'
Kết quả mong đợi: File được lưu lại, dòng cấu hình hiện rõ `shared_preload_libraries = 'timescaledb'`.
Khởi động lại dịch vụ PostgreSQL để áp dụng thay đổi cấu hình shared_preload_libraries.
sudo systemctl restart postgresql
Kết quả mong đợi: Dịch vụ restart thành công, không báo lỗi trong log.
Verify bằng lệnh kiểm tra trạng thái dịch vụ:
systemctl status postgresql
Kết quả mong đợi: Dòng "Active: active (running)" màu xanh lá, không có dòng "Error" hay "Failed".
Kích hoạt Extension TimescaleDB trong PostgreSQL
Để sử dụng các tính năng của TimescaleDB, bạn phải kích hoạt extension trong database mục tiêu. Việc này tạo ra các schema, functions và tables cần thiết bên trong PostgreSQL.
Trước tiên, đăng nhập vào PostgreSQL bằng user `postgres`.
sudo -u postgres psql
Kết quả mong đợi: Prompt thay đổi từ shell sang `postgres=#`.
Kiểm tra xem bạn đang làm việc trên database nào (mặc định là `postgres`).
\conninfo
Kết quả mong đợi: Hiển thị Database: "postgres".
Tạo extension TimescaleDB. Lệnh này sẽ tự động tạo schema `timescaledb` và các hàm tương ứng.
CREATE EXTENSION IF NOT EXISTS timescaledb;
Kết quả mong đợi: Thông báo "CREATE EXTENSION".
Để kiểm tra extension đã được tạo thành công, liệt kê các extension đang hoạt động.
\dx
Kết quả mong đợi: Bảng hiển thị danh sách extension, trong đó có dòng `timescaledb` với version số (ví dụ: 2.10.x) và schema `timescaledb`.
Rời khỏi shell PostgreSQL sau khi hoàn thành.
\q
Kết quả mong đợi: Quay lại prompt shell Linux.
Kiểm tra phiên bản và trạng thái hoạt động
Bước cuối cùng là xác minh rằng TimescaleDB đã được tích hợp hoàn toàn vào PostgreSQL và sẵn sàng nhận dữ liệu.
Đăng nhập lại vào PostgreSQL để chạy các lệnh kiểm tra.
sudo -u postgres psql
Sử dụng hàm hệ thống `_timescaledb_internal.get_version()` để lấy phiên bản chính xác của extension.
SELECT _timescaledb_internal.get_version();
Kết quả mong đợi: Trả về chuỗi phiên bản dạng `2.x.x` (ví dụ: `2.11.0`).
Kiểm tra xem extension có đang ở trạng thái "installed" và không bị lỗi không bằng cách query từ catalog `pg_extension`.
SELECT extname, extversion, extrelocatable FROM pg_extension WHERE extname = 'timescaledb';
Kết quả mong đợi: Trả về 1 dòng với `extname` là `timescaledb`, `extversion` khớp với phiên bản cài đặt, và `extrelocatable` là `f` (false, vì extension này không thể di chuyển schema).
Kiểm tra xem shared preload library đã được load vào memory chưa.
SHOW shared_preload_libraries;
Kết quả mong đợi: Trả về giá trị `timescaledb`.
Rời khỏi PostgreSQL.
\q
Kết quả mong đợi: Quay lại shell, quá trình cài đặt và khởi tạo hoàn tất.
Điều hướng series:
Mục lục: Series: Triển khai Database Time-Series với TimescaleDB và Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 cho Time-Series Database
Phần 3: Khái niệm Hypertable và tạo bảng dữ liệu chuỗi thời gian »