🔴 Relacyjna Baza danych PostgreSQL

@Maniek podaj ścieżkę do katalogu home - to jest partycja dla użytkownika

/data/data/pl.sviete.dom/files/home

Bo teraz masz do głównego

/

i pokazuje wielkość tamtej partycji

Testowałem i jak wpiszę tą ścieżkę, którą podałeś to pokazuje mi, że “niedostępny”

Ja mam tak, sprawdź

- platform: systemmonitor
  resources:
    - type: processor_use
    - type: processor_temperature
    - type: memory_use_percent
    - type: disk_use_percent
      arg: /data/data/pl.sviete.dom/files/home/AIS

Panowie podpowiedzcie co jest nie tak…otóż po miesiącu baza danych urosła mi do 32GB i się wysypała. W ustawieniach mam dwie encje do rejestrowania, ale i tak baza rośnie do takich rozmiarów. Próbowałem już różnych rozwiązań MariaDB v5 i v 10, PostgreSQL, zapis na pendrive i żaden ze sposobów nie działa.
image
W pliku konfiguracyjnym mam taki wpis:

history:

include:

# domains:
  # - sensor
  # - switch
  # - media_player

exclude:

# domains:
  # - automation
  # - updater

recorder:
purge_keep_days: 30
include:
entities:
- sensor.0_electricity_meter_total_forward_active_energy_balanced
- sensor.gas_meter
exclude:
domains:
- alarm_control_panel
- automation
- binary_sensor
- button
- calendar
- camera
- climate
- cover
- group
- input_boolean
- input_datetime
- input_number
- input_select
- input_text
- light
- media_player
- number
- person
- plant
- remote
- script
- select
- sun
- switch
- timer
- weather
- zone
entity_globs:
- sensor.ais_*
- sun.su*
entities:
- sensor.time
- sensor.version_info
- sensor.najnizsza_temperatura_w_domu
- sensor.najwyzsza_temperatura_w_domu
- sensor.srednia_temperatura_w_domu
- sensor.usredniona_temperatura_w_domu
- sensor.srednia_temperatura_w_pokojach
- sensor.ostatnia_temperatura_w_domu
- sensor.najnizsza_wilgotnosc_w_domu
- sensor.najwyzsza_wilgotnosc_w_domu
- sensor.srednia_wilgotnosc_w_domu
- sensor.usredniona_wilgotnosc_w_domu
- sensor.ostatnia_wilgotnosc_w_domu
event_types:
- call_service

1 polubienie

Musisz ustalić która encja loguje takie ilości danych.
Poniżej zapytanie listujące TOP10 encji:

sqlite3 <sciezka_do_pliku_bazy>/ais.db
sqlite> .header on
sqlite> .mode column
sqlite> .width 30, 10,
sqlite> SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10;

@Sebastian a jak to ogarnąć dla postgresql? Te komendy nie działają pod postgresql niestety no bo logiczne są pod sqlite…

Np tak:

psql ha
SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10;
exit

@SebiCo Dziękuję bardzo. Może wiesz jak oczyścić tą bazę teraz z danych (flush). Nie rozumiem dlaczego loguje mi tyle danych z sensorów, które teoretycznie wyłączyłem z logowania. W zbieraniu danych ująłem tylko dwa sensory, a loguje mi ich znacznie więcej…

Moim zdaniem powinieneś wywalić całe exclude i zostawić tylko te dwa sensory w include

EDIT1
A co do wyczyszczenia bazy to
TRUNCATE TABLE events, states;
powinno dać radę, oczywiście to wyczyści te dwie tablice do zera!

EDIT2
Ostatnio coś pozmieniali w logowaniu do bazy i teraz nie zapisują już powtarzających się rekordów

EDIT3
sprawdzenie rozmiaru tablic
\dt+

@SebiCo Dziękuję Ci bardzo za pomoc. Wszystko co chciałem ogarnąłem. Teraz jest już ok. Pozdrawiam.

Dziś miałam awarię internetu w domu, musialem wyłączyć Jolkę z prądu bo nie chciala sie obudzić po naprawie awari i po uruchomieniu coś stalo się z moją bazą danych… Macie jakies pomysły? Wyglada jak bym mial 2 bazy o nazwie db … jak sie tego pozbyc i zostawic tą właściwą?


Zatrzymaj jedną, np. id 10
pm2 stop 10
zapisz
pm2 save
zrestartuj bramkę i zobacz co będzie.

1 polubienie

Dziękuje pomogło, zrobiłem pm2 stop 10
a później pm2 delete 10.
Baza znikneła.

Czy ktoś jest w stanie podpowiedzieć dlaczego po przejściu na repozytoria Termux nie mogę uruchomić ponownie bazy w/g opisu @jolka ?

~ $ createuser --superuser --pwprompt ais
Enter password for new role: 
Enter it again: 
createuser: error: connection to server on socket "/data/data/com.termux/files/usr/tmp/.s.PGSQL.5432" failed: FATAL:  role "u0_a57" does not exist
~ $ pg_ctl -D $PREFIX/var/lib/postgresql start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start....2022-08-23 13:43:57.256 CEST [24260] FATAL:  lock file "postmaster.pid" already exists
2022-08-23 13:43:57.256 CEST [24260] HINT:  Is another postmaster (PID 5148) running in data directory "/data/data/com.termux/files/usr/var/lib/postgresql"?
 stopped waiting
pg_ctl: could not start server
Examine the log output.
~ $ createuser --interactive ais
Shall the new role be a superuser? (y/n) y
createuser: error: connection to server on socket "/data/data/com.termux/files/usr/tmp/.s.PGSQL.5432" failed: FATAL:  role "u0_a57" does not exist

Z dokumentacji tyle (nie mam kompetencji do zrozumienia co z czym):

lock file "postmaster.pid" already exists

usuń plik postmaster.pid z /data/data/com.termux/files/usr/var/lib/postgresql

1 polubienie

Usunąłem plik postmaster.pid ale nadel ten sam błąd. Nie wiem za bardzo co robię więc szukam pomocy dalej. Bardziej w celach edukacyjnych, bo teraz upewniam się tylko, że długoterminową DB należy mieć na zewnątrz bramki.

~ $ pg_ctl -D $PREFIX/var/lib/postgresql start
waiting for server to start....2022-08-23 20:32:59.314 CEST [16950] LOG:  starting PostgreSQL 14.2 on arm-unknown-linux-androideabi, compiled by Android (7714059, based on r416183c1) clang version 12.0.8 (https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee), 32-bit
2022-08-23 20:32:59.316 CEST [16950] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2022-08-23 20:32:59.330 CEST [16950] LOG:  listening on Unix socket "/data/data/com.termux/files/usr/tmp/.s.PGSQL.5432"
2022-08-23 20:32:59.343 CEST [16954] LOG:  database system was shut down at 2022-08-23 20:31:26 CEST
2022-08-23 20:32:59.360 CEST [16950] LOG:  database system is ready to accept connections
 done
server started
~ $ createuser --superuser --pwprompt ais
Enter password for new role: 
Enter it again: 
2022-08-23 20:33:22.489 CEST [17116] FATAL:  role "u0_a57" does not exist
2022-08-23 20:33:22.509 CEST [17117] FATAL:  role "u0_a57" does not exist
createuser: error: connection to server on socket "/data/data/com.termux/files/usr/tmp/.s.PGSQL.5432" failed: FATAL:  role "u0_a57" does not exist
~ $ 

Ale teraz już serwer startuje. Jeśli miałeś tam starą bazę to w zasadzie powinno działać, nie ma potrzeby ponownego tworzenia usera. Jeśli tworzysz nową bazę to wcześniej wyczyść cały katalog $PREFIX/var/lib/postgresql bo mogły zostać jakieś “śmieci”

Dzięki sprawdzę w działaniu…
Ale coś mi się @SebiCo nie zgadza.

~ $ psql -l
psql: error: connection to server on socket "/data/data/com.termux/files/usr/tmp/.s.PGSQL.5432" failed: FATAL:  role "u0_a57" does not exist
~ $ psql ha
psql: error: connection to server on socket "/data/data/com.termux/files/usr/tmp/.s.PGSQL.5432" failed: FATAL:  role "u0_a57" does not exist
~ $ 

EDIT:
Wczoraj przerobiłem na czuja sensor SQL na taką konfigurację i też działa:

- platform: sql
  db_url: postgresql://u0_a57:@localhost/local socket
  queries:
    - name: DB size
      query: "SELECT (pg_database_size('local socket')/1024/1024) as db_size;"
      column: "db_size"
      unit_of_measurement: MB

Wykrywany jest też w GUI HA jako gotowy do skonfigurowania.

1 polubienie

Zatrzymaj serwer
usuń z /data/data/com.termux/files/usr/tmp/ plik/i .s.PGSQL.5432*
i wystartuj serwer, zobacz czy będzie ok

Sensor mam tak:

- platform: sql
  db_url: postgresql://ais:dom@localhost/ha
  queries:
    - name: DB size
      query: "SELECT (pg_database_size('ha')/1024/1024) as db_size;"
      column: "db_size"
      unit_of_measurement: MB

Pewnie ten sensor miesza bo używasz usera u0_a57 (bez hasła zresztą :wink: ) - najlepiej zmodyfikuj ten sensor do standardowych ais:dom no i baza ha chyba że masz local, ale watpię bo w gui masz ha.

1 polubienie

Nie mam takiego pliku w tym katalogu.