Sayfalar

1 Ekim 2024 Salı

Postgresql TimeScaleDB ve mevcut tabloyu timeseri tabloya dönüştürme

 PostgreSQL'de Zaman Serisi Veritabanı Oluşturmak ve Mevcut tablolarınızı Zaman Seri tablolarda saklayarak performansı artırabilirsiniz. bunun için güçlü bir kullanım ve performans olarak ta ciddi kazanımlar sağlamaktadır.


Postgresql 16 da sürümünde henüz resmi pakteleri desteklememektedir, 15 sürümünde doğrudan kurabilirsiniz.   ben hem 15 hemde 16 versiyon için kurulum paktlerini paylaşacağım.


postgresql 15 versiyon ullanıyorsanız. aşağıdaki komutlar ile timescale extentionu postgresql kurulu makinanıza kolay bi şekilde kurabilirsiniz. tabi bu kurulumlar debian ve türevleri için,



--postgresql 15 versioyon için

sudo apt update

sudo apt install postgresql-15-timescaledb-2-postgresql-15




--postgresql 16 versiyon için;

--timescale db nin ihtiyaç duyduğu araçları yükleyelim.

sudo apt update
sudo apt install build-essential cmake git libssl-dev clang llvm libclang-dev postgresql-server-dev-16


--TimeScaleDb kaynak kodu indiriyoruz githup tan.
cd /usr/local/src/
sudo git clone https://github.com/timescale/timescaledb.git
cd timescaledb

# Uyumlu sürüm için TimescaleDB'nin ana dalına çekelim
sudo git checkout latest


-- TimeScaleDB yi Derliyoruz
# Kuruluma hazırlık
sudo ./bootstrap

# Derleme
cd build && sudo make

# Kurulum
sudo make install


buraya kadar hem 15 hemde 16 versiyon postgresql sürümleri için kurulumu tamamladık. Şimdide extention ı db de oluşturacağız

sudo systemctl restart postgresql


-- TimescaleDB'nin yüklü olduğunu doğrulayın
\dx

-- Eklentiyi yüklemek için bir veritabanına bağlanın ve TimescaleDB'yi ekleyin
biz burada test_timescale_db adında bir db oluşturup işlemlerimizi orada yapacağız.

create database test_timescale_db

\c test_timescale_db

CREATE EXTENSION IF NOT EXISTS timescaledb;

-- Tablomuzun createini pgadmin üzerinden alarak yeni veritabanımızda oluşturalım.

>>> buradaki adımı pgadmin üzerinden yapıyorsunuz..

--TimescaleDB ile Hypertable Dönüşümü
Tabloyu TimescaleDB’nin performans özelliklerinden faydalanmak için hypertable’a dönüştürelim. Bu işlemi sendtime sütununu kullanarak yapacağız (zaman temelli veri olduğu için bu sütunu seçtik).

Burada önemli bir konu daha var, eğer time seri data da null varsa bunu yapmaya izin vermeyecektir. data da null olmaması gerekir.

-- Test veritabanına geri dönün
\c test_timescale_db;

-- Tabloyu hypertable'a dönüştürün
SELECT create_hypertable('public.projectadata', 'sendtime');


Timescale db de sıkıştırma özelliğini de kullanabilirsiniz.  

-- Sıkıştırmayı tabloya uygulayın
ALTER TABLE public.projectadata SET (timescaledb.compress, timescaledb.compress_orderby = 'sendtime');

-- Sıkıştırmayı uygula
SELECT compress_chunk(i.chunk_name) 
FROM show_chunks('public.projectdata') i;



tüm işlemler bu kadar,

şimdi burada aynı instance yani cluster da bulunan farklı db lerde bulunan bir tabloyu test_timescale_db ye atarak kullanıma başlayacağız.

bunun için dblinki kullanabiliriz, yada pg_admin , pg_dump gibi diğer toollar ile aktarımı yapabiliriz.

.-dblink Kullanarak Veri Kopyalayın

-- Mevcut veritabanında
CREATE EXTENSION dblink;

-- Test veritabanında
\c test_timescale_db
CREATE EXTENSION dblink;


daha sonra verileri atıyoruz..

tabi bu işlemden önce data da null olmadığını kontrol ediyoruz..

--varsa farklı kolon secebiliriz.
SELECT count(*) 
FROM public.projectdata 
WHERE sendtime IS NULL;


-- Mevcut veritabanına bağlanarak veri çekin ve yeni veritabanındaki tabloya ekleyin

INSERT INTO test_timescale_db.public.projectdata
SELECT * FROM dblink('dbname=test user=postgres', 'SELECT * FROM public.projectdata') 
AS t(customername VARCHAR(25), platformname VARCHAR(25), systemname VARCHAR(25), categoryname VARCHAR(255), tagname VARCHAR(100), sensorname VARCHAR(25), tagvalue DOUBLE PRECISION, tagdate VARCHAR(10), tagtime TIME, des_unit VARCHAR(155), hour INTEGER, minute INTEGER, second INTEGER, tagdescription VARCHAR(100), tagminvalue DOUBLE PRECISION, tagmaxvalue DOUBLE PRECISION, tagunit VARCHAR(50), data_status VARCHAR(8), tagerrvalue INTEGER, tagdatetime VARCHAR(26), sendtime TIMESTAMP);


tablo üzerinde chunklar olup olmadığını görebiliriz


SELECT show_chunks('public.proectdata');

--eğer chunk'lar varsa bunları sıkıştırabiliriz.

SELECT compress_chunk(chunk)
FROM show_chunks('public.projectdata') AS chunk;



12 Mart 2024 Salı

linux locale dil ayar değişimi sonrası Patroni Create cluster failed hatası

 Merhabalar,


Ubunutu/debian türevleri üzerine kurulu olan bir patroni cluster yapısınnda diğer node larda aynı dil ayarı yoksa patroni direkt failed verecektir..


Peki nasıl çözeriz.? Hem local hemde sistem dilini istediğimiz ayara cevirebilir miyiz.?


makinalara ssh ile 3 party toollar ile bağlandığında aslında değişiklikleri yapıldığını herhangi bri hata ekranı vermediği görülebilir. bu durumda aslında doğrudan sunucu üzerinden yada sisteme Vm üzerinden direkt bağlanmak gerekebilir.












öncelikle ~/.bashrc ve ~/.profile dosyası altında bulunan export ile başlayan dil ayarlarını kaldırın.


root@node:# vi /etc/default/locales altında bulunan dil ayarlarınızı kaldırın.

root@node:#dpkg-reconfigure locales ile gelen mor ekranda en_US.UTF-8 ve tr_TR.UTF-8 secili olduğuna emin olalım (bu ayar aslında ana makinada bulunan ayar ile aynı olmalıdır.)


daha sonra secimimiz local dil ayarı ile devam ediyor olacağız. aşağdaıki ekranda local dil ayarımızın hangisi olmasını istiyorsak onu secerek terminal ekranımızın dilinin de o olmasını sağlamış olacağız.










Burada önemli olan nokta bunu mobaXterm ile yada putty ile yapıldığında  failed olması durumunda ekrana information bilgisi vermemsinden kaynaklanmaktadır. bu durumda direk olarak idirect, vm portal yada vcenter üzerinden doğrudan makina arayüzüne bağlanarak gerçekleştirmek doğru olacaktır.