Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

92
Views
Storing open hours for a site in Postgres

I am trying to store on Postgres site opening hours, after reading this link I managed to come up with this table

create table opening_hours 
 (
    store_id  int REFERENCES site (id) NOT NULL,
    day_of_the_week integer NOT NULL,
    open_time    time with time zone not NULL,
    close_time   time with time zone not NULL
);

I am having a problem now that some stores are open between 6 AM and 1 AM on the following day.

As the time field is limited to 24:00:00 I could add a new row to the same table for the remaining hours e.g:

store_id,day_of_the_week,open_time,close_time
1,0,'06:00:00','24:00:00'
1,1,'00:00:00','01:00:00'
1,1,'06:00:00','24:00:00'
...

But that just seems to be too convoluted.

Another solution is to create this table:

create table opening_hours 
 (
    store_id  int REFERENCES site (id) NOT NULL,
    day_of_the_week integer NOT NULL,
    open_time    time with time zone not NULL,
    operating_minutes   integer not NULL
);

and populate the table with such content:

store_id,day_of_the_week,open_time,operating_minutes
1,0,'06:00:00',500
1,1,'06:00:00',500
...

However, this query would make the query to determine if a store is now() open a bit more difficult as I would need to consider specific cases when querying, ultimately what I would like to query is:

select (localtime > open_time and localtime < close_time) from opening_hours oh  where store_id = 1 and day_of_the_week = date_part('dow', now())

Another thing that I was considering is that I am always storing data for every store no matter if they are open or not, but for some of the reports, I need to filter out the events within the time range defined on my table opening_hours.

I'm looking for advice on what would be the preferred way of storing this data into Postgres.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

You can query for an open store with this logic:

where (open_time < close_time and localtime between open_time and close_time) or
      (open_time > close_time and localtime not between open_time and close_time)

This uses between and not between for simplicity. However, they may not handle the exact opening and closing times the way you want (are those specific times included or not?).

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!