| do $$ |
| declare |
| departure_time_type text; |
| begin |
| select data_type |
| into departure_time_type |
| from information_schema.columns |
| where table_schema = 'public' |
| and table_name = 'driver_trips' |
| and column_name = 'departure_time'; |
|
|
| if departure_time_type = 'timestamp with time zone' then |
| alter table public.driver_trips |
| add column if not exists departure_date date; |
|
|
| alter table public.driver_trips |
| add column if not exists departure_time_bucket text; |
|
|
| update public.driver_trips |
| set |
| departure_date = (departure_time at time zone 'Asia/Aden')::date, |
| departure_time_bucket = case |
| when extract(hour from departure_time at time zone 'Asia/Aden') < 12 then 'morning' |
| when extract(hour from departure_time at time zone 'Asia/Aden') < 18 then 'noon' |
| else 'night' |
| end |
| where departure_date is null |
| or departure_time_bucket is null; |
|
|
| alter table public.driver_trips |
| alter column departure_date set not null; |
|
|
| alter table public.driver_trips |
| drop column departure_time; |
|
|
| alter table public.driver_trips |
| rename column departure_time_bucket to departure_time; |
| end if; |
| end; |
| $$; |
|
|
| alter table public.driver_trips |
| alter column departure_time set not null; |
|
|
| alter table public.driver_trips |
| drop constraint if exists driver_trips_departure_time_check; |
|
|
| alter table public.driver_trips |
| add constraint driver_trips_departure_time_check |
| check (departure_time in ('morning', 'noon', 'night')); |
|
|
| drop index if exists public.idx_driver_trips_active_route; |
|
|
| create index if not exists idx_driver_trips_active_route |
| on public.driver_trips(status, departure, destination, departure_date, departure_time); |
|
|