PostgreSQL Sorguları
PostgreSQL sorguları, Compass modülünde Port'a eklenmiş bir PostgreSQL veri kaynağı üzerinde standart SQL ve PostgreSQL uzantılarıyla yazılan sorgulardır.
Güçlü Yanları
| Özellik | Açıklama |
|---|---|
| Tam ANSI SQL | JOIN, CTE (WITH), window function, HAVING tam destek |
| TimescaleDB Uyumu | time_bucket() ile yüksek frekanslı zaman serisi sorguları |
| JSONB Desteği | data->>'key' ile yarı-yapılandırılmış veri sorgulama |
| Schema Organizasyonu | schema_adi.tablo_adi ile çok-şemalı veritabanı yapısı |
| Gelişmiş Tip Dönüşümü | ::timestamp, ::numeric gibi :: ile tip casting |
| Dizi (Array) Desteği | ARRAY_AGG(), UNNEST() ile dizi işlemleri |
Pirivision'da Sık Kullanılan Sorgu Kalıpları
Demo Fabrika veri kümesi
Aşağıdaki örnekler Demo Fabrika PostgreSQL şemasını kullanır: sensor_zaman_serisi (30 günlük sıcaklık/basınç), vardiya_uretim (vardiya bazlı üretim), oee_gunluk, alarm_log, duris_log, recete_parametre + hatlar / makineler / urun_aileleri lookup tabloları. Port'taki veri kaynağı adı: Demo Fabrika - PostgreSQL.
Aynı veriyi kendi ortamınızda oluşturmak için → Sentetik Veri Üretimi — PostgreSQL
-- Anlık KPI (son OEE değeri)
SELECT ROUND(oee_yuzde, 1) AS oee
FROM oee_gunluk
ORDER BY ts DESC
LIMIT 1;
-- Zaman serisi — parametreli tarih aralığı ve hat
SELECT ts,
sicaklik AS sicaklik_c,
basinc AS basinc_bar,
makine_id
FROM sensor_zaman_serisi
WHERE ts >= {{start_date}}::timestamp
AND ts <= {{end_date}}::timestamp
AND hat_id = {{hat_id}}
ORDER BY ts;
-- TimescaleDB / DATE_TRUNC — saatlik ortalama
SELECT
DATE_TRUNC('hour', ts) AS saat,
makine_id,
AVG(sicaklik) AS ort_sicaklik
FROM sensor_zaman_serisi
WHERE ts >= {{start_date}}::timestamp
AND ts <= {{end_date}}::timestamp
GROUP BY saat, makine_id
ORDER BY saat;
-- GROUP BY özet — hat bazlı OEE
SELECT hat_id,
AVG(oee_yuzde)::numeric(5,1) AS oee
FROM oee_gunluk
WHERE ts >= CURRENT_DATE - 7
GROUP BY hat_id
ORDER BY hat_id;
Önemli PostgreSQL Fonksiyonları
| Kategori | Fonksiyon | Örnek |
|---|---|---|
| Zaman | NOW() |
WHERE ts > NOW() - INTERVAL '1 hour' |
| Zaman | DATE_TRUNC() |
DATE_TRUNC('day', ts) |
| Zaman | EXTRACT() |
EXTRACT(HOUR FROM ts) |
| Zaman | CURRENT_DATE |
WHERE ts >= CURRENT_DATE - 7 |
| Tip | ::tip |
ts::date, sicaklik::numeric(5,1) |
| Metin | TO_CHAR() |
TO_CHAR(ts, 'DD.MM.YYYY HH24:MI') |
| Metin | CONCAT() |
CONCAT(deger, ' ', birim) |
| Agregasyon | PERCENTILE_CONT |
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY sicaklik) |
| TimescaleDB | time_bucket() |
time_bucket('1 hour', ts) |
Gereksinimler
| Gereksinim | Açıklama |
|---|---|
| Port'ta PostgreSQL veri kaynağı | Bağlantısı test edilmiş olmalı |
| SELECT yetkisi | Veritabanı kullanıcısının sorgulanacak tablolarda yetkisi olmalı |
Rehberler
| Rehber | Açıklama |
|---|---|
| PostgreSQL Sorgusu Oluşturma | Compass'ta yeni PostgreSQL sorgusu yazma |
| PostgreSQL Sorgusu Düzenleme | Mevcut sorguyu güncelleme |
| Sorgu Taşıma | Farklı klasöre taşıma |
| Sorgu Çoğaltma | Kopyalama |
| Sorgu Silme | Kaldırma |