Schema
Live

Database schema

A live map of the energy_prod PostgreSQL database for anyone integrating with or exploring the data. Column types and example rows are read from the database on every load; the descriptions are curated.

How to read this

  • Two schemas. core holds the canonical tables written by ingestion (the write side, owned by Alembic). mart exposes read-only views for consumers — start here unless you need raw detail.
  • Time. Every fact carries delivery_ts_utc (UTC), delivery_ts_local and timezone. granularity_minutes is the native resolution; the *_15min views resample everything onto one uniform 15-minute grid.
  • Versioning. Forecasts and Aurora data keep every version_date; is_latest flags the newest, and the *_latest* views pre-filter to it.
  • Currency & zones. Prices are EUR/MWh; mart.v_market_prices_local converts to local currency via ECB rates. market_zone is an ENTSO-E EIC code (→ core.market_zones).
  • Access. A read-only role can SELECT on mart only (ADR-013).

core · reference

Registries the pipeline reads to decide what to ingest and how to label it.

core.countries

table~4 rows5 columns

Registry of countries the pipeline tracks. ENTSO-E ingestion only pulls countries flagged is_active (ADR-020).

ColumnTypeNull?Description
country_codePK
textnoISO-3166 alpha-2 code (primary key).
country_name
textnoDisplay name.
currency_code
textnoISO-4217 local currency; used by mart.v_market_prices_local for FX conversion.
timezone
textnoIANA timezone used to derive local timestamps for this country.
is_active
booleannoWhen false, the ingestion skips this country.
Example row
country_code
IT
country_name
Italy
currency_code
EUR
timezone
Europe/Rome
is_active
true

core.market_zones

table~10 rows4 columns

Bidding / market zones per country, keyed by ENTSO-E EIC code. Ingestion reads the active zones to know which areas to request (ADR-020).

ColumnTypeNull?Description
zone_codePK
textnoENTSO-E EIC code (primary key), e.g. 10Y1001A1001A73I.
country_code
textnoOwning country → core.countries.country_code.
zone_name
textnoDisplay name (e.g. Italy North).
is_active
booleannoWhen false, the ingestion skips this zone.
Example row
zone_code
10Y1001A1001A73I
country_code
IT
zone_name
Italy North
is_active
true

core.sources

table~3 rows6 columns

Catalog of data providers. Descriptive only — each source is wired by a Python connector in the ingestion service; this table does not enable or disable ingestion.

ColumnTypeNull?Description
source_idPK
bigintnoSurrogate primary key.
source_nameunique
textnoUnique provider key (entsoe / aurora / ecb).
source_type
textnoapi or file.
base_url
textyesInformational endpoint / URL.
is_active
booleannoInformational flag — not read by the backend.
created_at
timestamp with time zonenoWhen the source row was created.
Example row
source_id
1
source_name
entsoe
source_type
api
base_url
https://web-api.tp.entsoe.eu/api
is_active
true
created_at
2026-06-16 13:50:15

core · market data

The canonical facts written by ingestion. Prices and forecasts are in EUR/MWh; generation in MW.

core.market_prices

table~3080 rows12 columns

Canonical electricity prices per delivery interval, zone and source. Always EUR/MWh (ENTSO-E settles in EUR). Grain: one row per (delivery_ts_utc, country, zone, source, granularity, version_date).

ColumnTypeNull?Description
idPK
bigintnoSurrogate primary key (auto-increment).
delivery_ts_utcunique
timestamp with time zonenoStart of the delivery interval, in UTC.
delivery_ts_local
timestamp without time zonenoSame instant as delivery_ts_utc, in the zone's local wall-clock time.
timezone
textnoIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_codeunique
textnoISO-3166 alpha-2 country code → core.countries.country_code.
market_zoneunique
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
price_eur_mwh
numericyesPrice in EUR per MWh.
currency_code
textnoAlways EUR here; local conversion lives in mart.v_market_prices_local.
source_nameunique
textnoOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutesunique
integernoNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_dateunique
dateyesVintage for revisable prices (NULL for ENTSO-E spot).
ingested_at
timestamp with time zonenoWhen the row was written into the database.
Example row
id
1
delivery_ts_utc
2026-06-11 22:00:00
delivery_ts_local
2026-06-12 00:00:00
timezone
Europe/Rome
country_code
IT
market_zone
10Y1001C--00096J
price_eur_mwh
144.590000
currency_code
EUR
source_name
entsoe
granularity_minutes
15
version_date
NULL
ingested_at
2026-06-16 13:50:27

core.generation

table~6528 rows12 columns

Actual electricity generation in MW per technology, delivery interval and zone (ENTSO-E actual generation; currently Solar & Wind).

ColumnTypeNull?Description
idPK
bigintnoSurrogate primary key (auto-increment).
delivery_ts_utcunique
timestamp with time zonenoStart of the delivery interval, in UTC.
delivery_ts_local
timestamp without time zonenoSame instant as delivery_ts_utc, in the zone's local wall-clock time.
timezone
textnoIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_codeunique
textnoISO-3166 alpha-2 country code → core.countries.country_code.
market_zoneunique
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
production_type
textnoHuman-readable generation technology (e.g. Solar, Wind Onshore).
psr_typeunique
textnoENTSO-E PSR code for the technology (e.g. B16 = Solar, B19 = Wind Onshore).
generation_mw
numericyesGenerated power in MW for the interval.
source_nameunique
textnoOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutesunique
integernoNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
ingested_at
timestamp with time zonenoWhen the row was written into the database.
Example row
id
1
delivery_ts_utc
2026-06-11 22:00:00
delivery_ts_local
2026-06-12 00:00:00
timezone
Europe/Rome
country_code
IT
market_zone
10Y1001C--00096J
production_type
Solar
psr_type
B16
generation_mw
0.000
source_name
entsoe
granularity_minutes
15
ingested_at
2026-06-16 13:50:28

core.forecast_prices

table~0 rows15 columns

Price forecasts per delivery interval, zone, scenario and market type. Versioned: every published vintage is kept (version_date), with is_latest flagging the newest.

ColumnTypeNull?Description
idPK
bigintnoSurrogate primary key (auto-increment).
delivery_ts_utcunique
timestamp with time zonenoStart of the delivery interval, in UTC.
delivery_ts_local
timestamp without time zonenoSame instant as delivery_ts_utc, in the zone's local wall-clock time.
timezone
textnoIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_codeunique
textnoISO-3166 alpha-2 country code → core.countries.country_code.
market_zoneunique
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
forecast_value
numericyesForecast price.
unit
textnoPrice unit (default EUR/MWh).
source_nameunique
textnoOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutesunique
integernoNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_dateunique
datenoPublication vintage of the data; lets multiple revisions coexist.
is_latest
booleannoTrue for the most recent version_date of each series (set by the loader).
ingested_at
timestamp with time zonenoWhen the row was written into the database.
scenariounique
textnoForecast scenario name (e.g. Central).
market_typeunique
textnoMarket segment the price refers to (e.g. Day-ahead, Intraday).
Example row

No rows yet.

core.assumptions

table~0 rows12 columns

Long-term scenario assumptions loaded from Aurora workbooks (fuel prices, FX, demand drivers…), keyed by geography, scenario, variable and year. Versioned by version_date.

ColumnTypeNull?Description
idPK
bigintnoSurrogate primary key (auto-increment).
source_nameunique
textnoOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
geographyunique
textyesRegion the assumption applies to (e.g. Italy).
scenariounique
textnoForecast scenario name (e.g. Central).
category
textyesGrouping for the variable (e.g. FX rates).
variableunique
textnoAssumption name.
unit
textyesUnit of value.
yearunique
integernoCalendar year the assumption refers to.
value
numericyesNumeric value.
version_dateunique
datenoPublication vintage of the data; lets multiple revisions coexist.
is_latest
booleannoTrue for the most recent version_date of each series (set by the loader).
ingested_at
timestamp with time zonenoWhen the row was written into the database.
Example row

No rows yet.

core.fx_rates

table~6740 rows7 columns

Daily foreign-exchange reference rates from the ECB, base EUR. Used to convert EUR prices to local currency.

ColumnTypeNull?Description
idPK
bigintnoSurrogate primary key (auto-increment).
baseunique
textnoBase currency (always EUR).
quoteunique
textnoQuote currency (e.g. RON).
rate_dateunique
datenoDate the rate applies to.
rate
numericnoUnits of quote currency per 1 unit of base.
sourceunique
textnoProvider (ecb).
ingested_at
timestamp with time zonenoWhen the row was written into the database.
Example row
id
1
base
EUR
quote
RON
rate_date
2010-02-14
rate
1.00000000
source
ecb
ingested_at
2026-06-16 13:50:29

core · operations & app

Job audit log, on-demand run queue, file uploads and dashboard settings.

core.ingestion_runs

table~5 rows10 columns

Audit log of ingestion job executions — one row per run, with status, row counts and timing. Powers the Job Runs page.

ColumnTypeNull?Description
run_idPK
bigintnoSurrogate primary key.
source_name
textnoSource the run ingested.
provider
textyesConnector / provider key used.
country_code
textyesCountry the run targeted (if scoped).
started_at
timestamp with time zonenoRun start time.
finished_at
timestamp with time zoneyesRun end time (NULL while running).
status
textnorunning / success / error.
rows_inserted
integeryesRows newly inserted.
rows_updated
integeryesRows updated (idempotent re-runs).
error_message
textyesPopulated on failure.
Example row
run_id
1
source_name
entsoe
provider
entsoe
country_code
IT
started_at
2026-06-16 13:50:18
finished_at
2026-06-16 13:50:27
status
success
rows_inserted
2695
rows_updated
0
error_message
NULL

core.ingestion_requests

table~0 rows11 columns

On-demand 'Run now' queue (ADR-023). The Job Runs page writes a pending row when an operator triggers an ingestion; the scheduler polls, runs the matching job, and updates the status. Decoupled from the web (Postgres only) — mirrors core.file_uploads.

ColumnTypeNull?Description
idPK
bigintnoSurrogate primary key.
kind
textnoWhat to run: entsoe-prices / entsoe-generation / ecb-fx.
country_code
textyesTarget country (NULL for country-agnostic kinds like ecb-fx).
status
textnopending / processing / done / failed.
requested_by
textyesWho triggered it (e.g. dashboard).
requested_at
timestamp with time zonenoWhen the request was enqueued.
started_at
timestamp with time zoneyesWhen the scheduler started processing it.
finished_at
timestamp with time zoneyesWhen processing finished.
run_id
bigintyesBest-effort link to the ingestion run it spawned → core.ingestion_runs.run_id.
rows_inserted
integeryesRows inserted by the triggered job.
error_message
textyesPopulated on failure.
Example row

No rows yet.

core.file_uploads

table~0 rows14 columns

Uploaded Aurora workbooks before/after processing. The binary file lives in content; the lifecycle is tracked via status. Read mart.v_file_uploads to avoid the binary column.

ColumnTypeNull?Description
idPK
bigintnoSurrogate primary key.
filename
textnoOriginal file name.
content
byteanoRaw uploaded bytes (redacted here).
byte_size
integernoFile size in bytes.
source_name
textnoSource the file belongs to.
kind
textnoWorkbook kind (e.g. aurora).
version_date
datenoVintage the upload represents.
status
textnopending / processed / error.
uploaded_by
textyesWho uploaded it.
uploaded_at
timestamp with time zonenoUpload time.
processed_at
timestamp with time zoneyesWhen processing finished.
run_id
bigintyesIngestion run that processed it → core.ingestion_runs.run_id.
rows_loaded
integeryesRows loaded from the file.
error_message
textyesPopulated on failure.
Example row

No rows yet.

core.app_settings

table~3 rows4 columns

Editable key/value pipeline settings (ADR-019). The Configuration page writes here; an environment variable, where set, takes precedence.

ColumnTypeNull?Description
keyPK
textnoSetting name (e.g. ingest_interval_days).
value
textyesSetting value (stored as text).
updated_by
textyesWho last changed it.
updated_at
timestamp with time zonenoWhen it was last changed.
Example row
key
ingest_interval_days
value
3
updated_by
NULL
updated_at
2026-06-16 13:50:15

core.api_keys

table~0 rows6 columns

Encrypted provider credentials, one row per provider. Secrets are encrypted at rest with pgcrypto (ADR-012) and are never exposed by the dashboard.

ColumnTypeNull?Description
providerPK
textnoProvider key (primary key).
key_value
byteanoEncrypted secret (bytea, redacted here).
status
textnoactive / disabled.
expires_at
timestamp with time zoneyesOptional expiry.
updated_by
textyesWho last set it.
updated_at
timestamp with time zonenoWhen it was last set.
Example row

No rows yet.

mart · views — start here

Read-optimised views with names joined in and uniform 15-min variants. Consumers (BI, integrations) should read from mart, not core.

mart.v_market_prices

view13 columns

core.market_prices enriched with country & zone names. EUR/MWh, native granularity. General-purpose price view.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
price_eur_mwh
numericyes
currency_code
textyes
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row
delivery_ts_local
2026-06-12 00:00:00
delivery_ts_utc
2026-06-11 22:00:00
timezone
Europe/Rome
country_code
IT
country_name
Italy
market_zone
10Y1001C--00096J
zone_name
Italy Calabria
price_eur_mwh
144.590000
currency_code
EUR
source_name
entsoe
granularity_minutes
15
version_date
NULL
ingested_at
2026-06-16 13:50:27

mart.v_market_prices_15min

view13 columns

Like v_market_prices but resampled to a uniform 15-minute grid (hourly values are expanded), so every zone aligns on one time axis.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
price_eur_mwh
numericyes
currency_code
textyes
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row
delivery_ts_local
2026-06-12 00:00:00
delivery_ts_utc
2026-06-11 22:00:00
timezone
Europe/Rome
country_code
IT
country_name
Italy
market_zone
10Y1001C--00096J
zone_name
Italy Calabria
price_eur_mwh
144.590000
currency_code
EUR
source_name
entsoe
granularity_minutes
15
version_date
NULL
ingested_at
2026-06-16 13:50:27

mart.v_market_prices_local

view16 columns

Prices converted to each country's local currency using the ECB rate effective on the delivery date.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
price_eur_mwh
numericyes
local_currency
textyesCountry's local currency (from core.countries).
price_local_mwh
numericyesprice_eur_mwh converted to local currency.
fx_rate
numericyesEUR→local rate applied.
fx_rate_date
dateyesDate of the FX rate used.
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row
delivery_ts_local
2026-06-12 00:00:00
delivery_ts_utc
2026-06-11 22:00:00
timezone
Europe/Rome
country_code
IT
country_name
Italy
market_zone
10Y1001C--00096J
zone_name
Italy Calabria
price_eur_mwh
144.590000
local_currency
EUR
price_local_mwh
144.590000
fx_rate
NULL
fx_rate_date
NULL
source_name
entsoe
granularity_minutes
15
version_date
NULL
ingested_at
2026-06-16 13:50:27

mart.v_generation

view13 columns

core.generation enriched with country & zone names. MW, native granularity.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
production_type
textyesHuman-readable generation technology (e.g. Solar, Wind Onshore).
psr_type
textyesENTSO-E PSR code for the technology (e.g. B16 = Solar, B19 = Wind Onshore).
generation_mw
numericyes
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row
delivery_ts_local
2026-06-12 00:00:00
delivery_ts_utc
2026-06-11 22:00:00
timezone
Europe/Rome
country_code
IT
country_name
Italy
market_zone
10Y1001C--00096J
zone_name
Italy Calabria
production_type
Solar
psr_type
B16
generation_mw
0.000
source_name
entsoe
granularity_minutes
15
ingested_at
2026-06-16 13:50:28

mart.v_generation_15min

view13 columns

Generation resampled to a uniform 15-minute grid.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
production_type
textyesHuman-readable generation technology (e.g. Solar, Wind Onshore).
psr_type
textyesENTSO-E PSR code for the technology (e.g. B16 = Solar, B19 = Wind Onshore).
generation_mw
numericyes
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row
delivery_ts_local
2026-06-12 00:00:00
delivery_ts_utc
2026-06-11 22:00:00
timezone
Europe/Rome
country_code
IT
country_name
Italy
market_zone
10Y1001C--00096J
zone_name
Italy Calabria
production_type
Solar
psr_type
B16
generation_mw
0.000
source_name
entsoe
granularity_minutes
15
ingested_at
2026-06-16 13:50:28

mart.v_forecast_all

view16 columns

Every forecast vintage (all version_dates), with names joined in. Use it to compare how a forecast changed across publications.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
scenario
textyesForecast scenario name (e.g. Central).
market_type
textyesMarket segment the price refers to (e.g. Day-ahead, Intraday).
forecast_value
numericyes
unit
textyesUnit of the value.
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
is_latest
booleanyesTrue for the most recent version_date of each series (set by the loader).
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row

No rows yet.

mart.v_forecast_latest

view15 columns

Only the latest vintage (is_latest) of each forecast series — the current forecast.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
scenario
textyesForecast scenario name (e.g. Central).
market_type
textyesMarket segment the price refers to (e.g. Day-ahead, Intraday).
forecast_value
numericyes
unit
textyesUnit of the value.
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row

No rows yet.

mart.v_forecast_latest_15min

view15 columns

Latest forecast vintage resampled to a uniform 15-minute grid.

ColumnTypeNull?Description
delivery_ts_local
timestamp without time zoneyesSame instant as delivery_ts_utc, in the zone's local wall-clock time.
delivery_ts_utc
timestamp with time zoneyesStart of the delivery interval, in UTC.
timezone
textyesIANA timezone the local timestamp is expressed in (e.g. Europe/Rome).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
country_name
textyesHuman-readable country name (joined from core.countries).
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
zone_name
textyesHuman-readable zone name (joined from core.market_zones).
scenario
textyesForecast scenario name (e.g. Central).
market_type
textyesMarket segment the price refers to (e.g. Day-ahead, Intraday).
forecast_value
numericyes
unit
textyesUnit of the value.
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row

No rows yet.

mart.v_forecast_versions

view11 columns

Catalog of available forecast vintages: one row per series + version_date, with counts and delivery coverage. Discover what vintages exist before querying the detail views.

ColumnTypeNull?Description
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
country_code
textyesISO-3166 alpha-2 country code → core.countries.country_code.
market_zone
textyesENTSO-E bidding-zone EIC code → core.market_zones.zone_code (NULL = country-wide).
scenario
textyesForecast scenario name (e.g. Central).
market_type
textyesMarket segment the price refers to (e.g. Day-ahead, Intraday).
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
granularity_minutes
integeryesNative resolution in minutes (60 = hourly, 15 = quarter-hourly).
rows_count
bigintyesNumber of forecast points in the vintage.
min_delivery_ts_local
timestamp without time zoneyesEarliest delivery covered.
max_delivery_ts_local
timestamp without time zoneyesLatest delivery covered.
last_ingested_at
timestamp with time zoneyesWhen the vintage was last loaded.
Example row

No rows yet.

mart.v_assumptions_latest

view10 columns

Latest vintage (is_latest) of each assumption series from core.assumptions.

ColumnTypeNull?Description
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
geography
textyes
scenario
textyesForecast scenario name (e.g. Central).
category
textyes
variable
textyes
unit
textyesUnit of the value.
year
integeryes
value
numericyes
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row

No rows yet.

mart.v_fx_rates

view6 columns

ECB FX reference rates (passthrough of core.fx_rates) for joining / conversion.

ColumnTypeNull?Description
base
textyes
quote
textyes
rate_date
dateyes
rate
numericyes
source
textyes
ingested_at
timestamp with time zoneyesWhen the row was written into the database.
Example row
base
EUR
quote
RON
rate_date
2010-02-14
rate
1.00000000
source
ecb
ingested_at
2026-06-16 13:50:29

mart.v_file_uploads

view13 columns

core.file_uploads without the binary content column — safe to list upload history & status.

ColumnTypeNull?Description
id
bigintyesSurrogate primary key (auto-increment).
filename
textyes
byte_size
integeryes
source_name
textyesOriginating data source → core.sources.source_name (entsoe / aurora / ecb).
kind
textyes
version_date
dateyesPublication vintage of the data; lets multiple revisions coexist.
status
textyes
uploaded_by
textyes
uploaded_at
timestamp with time zoneyes
processed_at
timestamp with time zoneyes
run_id
bigintyes
rows_loaded
integeryes
error_message
textyes
Example row

No rows yet.