view optimization

This commit is contained in:
henkej committed 2026-10-05 14:52:46 +02:00
1 parent 1464210765
commit 21c3ab28ec
4 files changed
+59 -30

No files matched your search

+56 -26
View File
@@ -1,4 +1,4 @@
create schema done;
/vcreate schema done;
create table done.t_billing (
lastchange timestamp without time zone default now(),
@@ -41,7 +41,7 @@ create table done.t_done (
create table done.t_favorite (
lastchange timestamp without time zone default now(),
pk_favorite integer not null primary key generated always as identity,
fk_login integer not null references profile.t_login(pk),
fk_login integer not null references profile.t_login(pk),
fk_project integer references done.t_project(pk),
fk_module integer references done.t_module(pk),
fk_job integer references done.t_job(pk),
@@ -73,13 +73,30 @@ create table done.t_freetime (
unique(day, fk_login)
);
create view done.v_favorite as
select f.pk_favorite, f.fk_login, p.name as project, m.name as module, j.name as job, b.name as billing
from done.t_favorite f
left join done.t_project p on p.pk = f.fk_project
left join done.t_module m on m.pk = f.fk_module
left join done.t_job j on j.pk = f.fk_job
left join done.t_billing b on b.pk = f.fk_billing;
create or replace view done.v_favorite as
with x(fk_login, fk_project, fk_module, fk_job, fk_billing, amount) as (
select fk_login, fk_project, fk_module, fk_job, fk_billing, count(*)
from done.t_done
group by fk_login, fk_project, fk_module, fk_job, fk_billing
)
select f.pk_favorite,
f.fk_login,
p.name as project,
m.name as module,
j.name as job,
b.name as billing,
coalesce(x.amount, 0) as usage_count
from done.t_favorite f
left join done.t_project p on p.pk = f.fk_project
left join done.t_module m on m.pk = f.fk_module
left join done.t_job j on j.pk = f.fk_job
left join done.t_billing b on b.pk = f.fk_billing
left join x
on x.fk_login = f.fk_login
and x.fk_project is not distinct from f.fk_project
and x.fk_module is not distinct from f.fk_module
and x.fk_job is not distinct from f.fk_job
and x.fk_billing is not distinct from f.fk_billing;
create view done.v_billing as
with x(total) as (
@@ -97,11 +114,11 @@ create view done.v_done as
select d.pk as fk_done,
l.pk as fk_login,
d.time_from,
d.time_until,
p.name as project_name,
m.name as module_name,
j.name as job_name,
l.login
d.time_until,
p.name as project_name,
m.name as module_name,
j.name as job_name,
l.login
from done.t_done d
left join done.t_project p on p.pk = d.fk_project
left join done.t_module m on m.pk = d.fk_module
@@ -127,8 +144,8 @@ create view done.v_daylimits as
with x(time_from, time_until, day, fk_login) as (
select time_from,
coalesce(time_until::timestamp with time zone, now()) as "coalesce",
to_char(time_from, 'yyyy-MM-dd'::text) as day,
fk_login
to_char(time_from, 'yyyy-MM-dd'::text) as day,
fk_login
from done.t_done
) select min(x.time_from) as work_start,
max(x.time_until) as work_end,
@@ -147,11 +164,11 @@ create view done.v_eucanshare as
select d.pk as fk_done,
d.time_from::date as workday,
age(d.time_until, d.time_from) as duration,
p.name as project_name,
m.name as module_name,
j.name as job_name,
b.name as billing_name,
d.fk_login
p.name as project_name,
m.name as module_name,
j.name as job_name,
b.name as billing_name,
d.fk_login
from done.t_done d
left join done.t_project p on p.pk = d.fk_project
left join done.t_module m on m.pk = d.fk_module
@@ -160,11 +177,11 @@ left join done.t_billing b on b.pk = d.fk_billing;
create view done.v_hamster as
select time_from::date as workday,
age(time_until, time_from) as duration,
project_name,
module_name,
job_name,
login
age(time_until, time_from) as duration,
project_name,
module_name,
job_name,
login
from done.v_done;
create view done.v_hamstersummary as
@@ -304,6 +321,18 @@ with x(dayworktime, day, fk_login, required, starttime, endtime) as (
from x
order by day desc, fk_login;
create view done.v_favorite_count as
select f.pk_favorite,
f.fk_login,
count(d.pk) as usage_count
from done.t_favorite f
left join done.t_done d on d.fk_login = f.fk_login
and d.fk_project is not distinct from f.fk_project
and d.fk_module is not distinct from f.fk_module
and d.fk_job is not distinct from f.fk_job
and d.fk_billing is not distinct from f.fk_billing
group by f.pk_favorite, f.fk_login;
copy done.t_billing (lastchange, pk, name, shortcut, csskey) from stdin;
2021-03-05 19:37:07.12832 1 WP2 (eucs) - Opal/Mica/..., REST WP2 WP2
2021-03-05 19:37:07.12832 2 WP4 (eucs) - Square² WP4 WP4
@@ -414,3 +443,4 @@ grant select on done.v_worktime to timetrack;
grant select on done.v_daylimit to timetrack;
grant select on done.v_current_overtime to timetrack;
grant select on done.v_day to timetrack;
grant select on done.v_favorite_count to timetrack;
+1 -1
View File
@@ -1,5 +1,5 @@
create or replace view public.v_version as
select 20260114 as version;
select 20261005 as version;
grant usage on schema public to timetrack;