---
format: markdown
...

# Leases in der postgresql-Tabelle kea ermitteln  

Kea schreibt die Leases je Domäne in eine postgresql-Tabelle mit dem Namen kea. Diese können insgesamt oder je Domäne ausgelesen werden, um festzustellen, ob die Anzahl der möglichen Leases je Domäne ausreicht.   

# Vorgehen  

Aufruf der postgresql-Datenbank mit der Tabelle kea_leases und dem User kea auf dtm1:  

    $ sudo -u postgres /usr/lib/postgresql/9.5/bin/psql kea_leases kea -h "127.0.0.1" -W  

Das Passwort steht in kea.conf.  

Aufruf der postgresql-Datenbank mit der Tabelle kea_leases und dem User kea auf dus0x für posrgresql Version 17:  

    $ sudo -u postgres /usr/lib/postgresql/17/bin/psql kea_leases _kea -h "127.0.0.1" -W 

Hier muss der User _kea verwendet werden! Das Passwort seht in kea-dhcp4.conf.  
Es erscheint der postgresql-Prompt:

    kea_leases=> 

# Abfragen:  

    select hwaddr, valid_lifetime, expire, subnet_id, hostname, address/256/256/256 as ip1, address/256/256%256 as ip2, address/256%256 as ip3, address%256 as ip4 from lease4 where fqdn_fwd = true and subnet_id=2 order by expire desc;

Ergebnis: alle aktiven Geräte aus Domäne 2 mit ip als Dezimalzahl, wobei IP2 die Domäne anzeigt, hier 2.

    select * from lease4 where subnet_id=2 and fqdn_fwd=true order by expire DESC;

Ergebnis: alle aktiven Geräte aus Domäne 2 mit fqdn_fwd=true, nach Alter absteigend sortiert

ohne subnet_id=2:

    select * from lease4 where and fqdn_fwd=true order by expire DESC;

Ergebnis: alle Geräte aus Domäne 2, auch die nicht verbundenen Geräte, nach Alter absteigend sortiert.  
Die nicht mehr aktiven Geräte werden für 3 Monate gespeichert. 

# Mögliche Spalten der Tabelle lease4 in postgresql:

    SELECT column_name, data_type
    FROM information_schema.columns
    WHERE table_name = 'lease4';

Ergebnis:  

    |  column_name   |        data_type |        
    | -------------- | ---------------- |  
    | address        | bigint |  
    | hwaddr         | bytea |  
    client_id      | bytea  
    valid_lifetime | bigint  
    expire         | timestamp with time zone  
    subnet_id      | bigint  
    fqdn_fwd       | boolean  
    fqdn_rev       | boolean  
    hostname       | character varying  
    state          | bigint  
   (10 rows)  
Tabelle muss noch greichtet werden.  

# Anzahl der leases ermitteln für Domäne 2:

    select count(*) from lease4 where subnet_id=2; 
    count 
    -------
    2342
    (1 row)

# Alle  leases über alle Domänen:  

    select subnet_id, count(*) from lease4 group by subnet_id order by subnet_id;
