Files
postgsail/docs/ERD/README.md
2024-04-09 09:34:28 +02:00

2.8 KiB

PostgSail ERD

The Entity-Relationship Diagram (ERD) provides a graphical representation of database tables, columns, and inter-relationships. ERD can give sufficient information for the database administrator to follow when developing and maintaining the database.

A global overview

Auto generated Mermaid diagram using mermerd and MermaidJs.

PostgSail SQL Schema

Further

There is 3 main schemas into the signalk database:

  • API Schema:

    • tables
      • metrics
      • logbook
      • ...
    • functions
      • ...
  • Auth Schema:

    • tables
      • accounts
      • vessels
      • ...
    • functions
      • ...
  • Public Schema:

    • tables
      • app_settings
      • tpl_messages
      • ...
    • functions
      • ...

Overview

  • Insert data into table metadata from API using PostgREST
  • Insert data into table metrics from API using PostgREST
  • TimescaleDB Hypertable to store signalk metrics
  • pgsql functions to generate logbook, stays, moorages
  • CRON functions to process logbook, stays, moorages
  • python functions for geo reverse and send notification via email and/or pushover
  • Views statistics, timelapse, monitoring, logs
  • Always store time in UTC

Ingest flowchart

graph LR
    A[SignalK] -- HTTP POST --> B{PostgREST}
    B -- SQL --> C{PostgreSQL}
    C --> D((metadata trigger))
    C --> E((metrics trigger))
    D --> F{tbl.metadata}
    E --> G{tbl.metrics}
    E --> H{tbl.logs}
    E --> I{tbl.stays}

pg_cron flowchart

flowchart TD
    A[pg_cron] --> B((cron_new_notification))
    A --> C((cron_pre_logbook))
    A --> D((cron_new_logbook))
    A --> E((cron_new_stay))
    A --> F((cron_monitor_offline))
    A --> G((cron_monitor_online))
    C --> K{Validate logbook details}
    D --> L{Update logbook details}
    E --> M{Update stay details}
    L --> N{Update Moorages details}
    M --> N{Update Moorages details}
    B --> O{Update account,vessel,otp}
    F --> P{Update metadata}
    G --> P

How to bypass OTP for a local install?

You can skip the otp, add or update json key value to the account preference. "email_valid": true

OTP is created and sent by email using a cron in postgres/cron/job accounts are store in table signalk/auth/accounts You should have an history in table signalk/public/process_queue

By default they are no active job as it require external configuration settings (SMTP, PushOver, Telegram) To active all cron.job run the following SQL command.

UPDATE cron.job SET active = True;

How to turn off signups

If you just want to use this as a standalone application and don't want people to be able to sign up for an account.

revoke execute on function api.signup(text,text,text,text) to api_anonymous;