3 ms·
I have known about these for quite some time, but my only issue is that not all drivers in a particular language support range types.
by tmaly 10y ago
I have known about these for quite some time, but my only issue is that not all drivers in a particular language support range types.
- rattray 10y agoWhich language(s)?
- walrus 10y agoIf your driver or ORM is insufficient, you can use views: create table reservation (room text, duration tstzrange); insert into reservation (room, duration) values ('A100', '[2017-04-30, 2017-05-07]'), ('A100', '[2017-05-10, 2017-05-12]'); create view my_orm_sucks (room, start, stop) as select room, lower(duration), upper(duration) from reservation; Let's pretend building A caught on fire, so we have to move to building FM: select * from my_orm_sucks; room | start | stop ------+------------------------+------------------------ A100 | 2017-04-30 00:00:00-07 | 2017-05-07 00:00:00-07 A100 | 2017-05-10 00:00:00-07 | 2017-05-12 00:00:00-07 update my_orm_sucks set room = 'FM200' where room = 'A100'; The underlying table gets updated: select * from reservation; room | duration -------+----------------------------------------------------- FM200 | ["2017-04-30 00:00:00-07","2017-05-07 00:00:00-07"] FM200 | ["2017-05-10 00:00:00-07","2017-05-12 00:00:00-07"] Note that updates involving the start and stop columns won't work with a view like that. You can use the rules system to get around that: https://www.postgresql.org/docs/current/static/sql-createrule.html https://www.postgresql.org/docs/current/static/sql-createrul... https://www.postgresql.org/docs/current/static/rules-views.html https://www.postgresql.org/docs/current/static/rules-views.h... Or better yet, fix the driver or ORM!
- tmaly 10y agoThank you for that idea with views, I had not thought about that perspective. It will come in handy if I have to use ranges in the future. I do think ranges are a better way to model things.