Create Schema Manager and propagate contexts into the DB calls downstream. Add checks at controller startup and database init for correct schema version and schema migration dirty bit being set.
98 lines
3.7 KiB
PL/PgSQL
98 lines
3.7 KiB
PL/PgSQL
begin;
|
|
|
|
create table wh_date_dimension (
|
|
id integer primary key,
|
|
date date not null,
|
|
calendar_quarter wh_dim_text,
|
|
calendar_month wh_dim_text,
|
|
calendar_year smallint not null,
|
|
day_of_week wh_dim_text,
|
|
day_of_week_number smallint not null,
|
|
day_of_week_number_iso smallint not null,
|
|
day_of_week_number_zero_based smallint not null,
|
|
day_number_in_calendar_month smallint not null,
|
|
day_number_in_calendar_year smallint not null,
|
|
weekday_indicator wh_dim_text
|
|
);
|
|
|
|
insert into wh_date_dimension (
|
|
id, date,
|
|
calendar_quarter, calendar_month, calendar_year,
|
|
day_of_week, day_of_week_number, day_of_week_number_iso, day_of_week_number_zero_based,
|
|
day_number_in_calendar_month, day_number_in_calendar_year,
|
|
weekday_indicator
|
|
) values (
|
|
-1, 'infinity',
|
|
'None', 'None', -1,
|
|
'None', -1, -1, -1,
|
|
-1, -1,
|
|
'None'
|
|
);
|
|
|
|
insert
|
|
into wh_date_dimension
|
|
select to_char(t.day, 'YYYYMMDD')::integer as id,
|
|
t.day::date as date,
|
|
'Q' || to_char(t.day, 'Q') as calendar_quarter,
|
|
to_char(t.day, 'Month') as calendar_month,
|
|
extract(year from t.day) as calendar_year,
|
|
to_char(t.day, 'Day') as day_of_week,
|
|
to_char(t.day, 'D')::int as day_of_week_number,
|
|
extract(isodow from t.day) as day_of_week_number_iso,
|
|
extract(dow from t.day) as day_of_week_number_zero_based,
|
|
extract(day from t.day) as day_number_in_calendar_month,
|
|
extract(doy from t.day) as day_number_in_calendar_year,
|
|
case extract(isodow from t.day)
|
|
when 6 then 'Weekend'
|
|
when 7 then 'Weekend'
|
|
else 'Weekday'
|
|
end as weekday_indicator
|
|
from generate_series(
|
|
date_trunc('day', timestamp '2019-10-09'),
|
|
date_trunc('day', timestamp '2019-10-09' + interval '50 years'),
|
|
interval '1 day'
|
|
) as t(day);
|
|
|
|
create table wh_time_of_day_dimension (
|
|
id integer primary key,
|
|
time_no_zone time not null,
|
|
time_at_utc timetz not null,
|
|
hour_of_day smallint not null,
|
|
minute_of_hour smallint not null,
|
|
second_of_minute smallint not null,
|
|
display_time_24 wh_dim_text,
|
|
display_time_12 wh_dim_text,
|
|
meridiem_indicator wh_dim_text
|
|
);
|
|
|
|
set timezone = 'UTC';
|
|
|
|
insert into wh_time_of_day_dimension (
|
|
id, time_no_zone, time_at_utc,
|
|
hour_of_day, minute_of_hour, second_of_minute,
|
|
display_time_24, display_time_12, meridiem_indicator
|
|
) values (
|
|
-1, 'allballs', 'allballs',
|
|
-1, -1, -1,
|
|
'None', 'None', 'None'
|
|
);
|
|
|
|
insert
|
|
into wh_time_of_day_dimension
|
|
select to_char(t.second, 'SSSS')::integer as id,
|
|
t.second::time as time_no_zone,
|
|
t.second::time as time_at_utc,
|
|
extract(hour from t.second) as hour_of_day,
|
|
extract(minute from t.second) as minute_of_hour,
|
|
extract(second from t.second) as second_of_minute,
|
|
to_char(t.second, 'HH24:MI:SS') as display_time_24,
|
|
to_char(t.second, 'HH12:MI:SS AM') as display_time_12,
|
|
to_char(t.second, 'PM') as meridiem_indicator
|
|
from generate_series(
|
|
date_trunc('day', current_timestamp),
|
|
date_trunc('day', current_timestamp) + interval '24 hours' - interval '1 second',
|
|
interval '1 second'
|
|
) as t(second);
|
|
|
|
commit;
|