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.
Further
There is 3 main schemas into the signalk database:
-
API Schema:
- tables
- metrics
- logbook
- ...
- functions
- ...
- tables
-
Auth Schema:
- tables
- accounts
- vessels
- ...
- functions
- ...
- tables
-
Public Schema:
- tables
- app_settings
- tpl_messages
- ...
- functions
- ...
- tables
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;