-
Notifications
You must be signed in to change notification settings - Fork 887
fix(coderd/database): migrate workspaces.last_used_at to timestamptz #9699
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
ALTER TABLE ONLY workspaces | ||
ALTER COLUMN last_used_at | ||
SET DATA TYPE timestamp | ||
USING last_used_at::timestamptz, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we want to be 100% correct, this could use an AT TIME ZONE 'UTC'
too because during the up migration we are changing the time (correctly) if the db time zone is non-UTC.
This demonstrates how the timestamp would be coerced into the wrong time without
woop=# create temp table testy (ts timestamp, tsz timestamptz);
CREATE TABLE
woop=# insert into testy (ts, tsz) values ('0001-01-01 00:00:00+00', '0001-01-01 00:00:00+00'); select * from testy;
INSERT 0 1
ts | tsz
---------------------+------------------------------
0001-01-01 00:00:00 | 0001-01-01 01:39:49+01:39:49
(1 row)
woop=# update testy set ts = tsz::timestamptz; select * from testy;
UPDATE 1
ts | tsz
---------------------+------------------------------
0001-01-01 01:39:49 | 0001-01-01 01:39:49+01:39:49
(1 row)
Whereas with the time zone change:
woop=# truncate table testy;
TRUNCATE TABLE
woop=# insert into testy (ts, tsz) values ('0001-01-01 00:00:00+00', '0001-01-01 00:00:00+00'); select * from testy;
INSERT 0 1
ts | tsz
---------------------+------------------------------
0001-01-01 00:00:00 | 0001-01-01 01:39:49+01:39:49
(1 row)
woop=# update testy set ts = tsz at time zone 'utc'; select * from testy;
UPDATE 1
ts | tsz
---------------------+------------------------------
0001-01-01 00:00:00 | 0001-01-01 01:39:49+01:39:49
(1 row)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
…ed-at-timestamptz
…ed-at-timestamptz
…ed-at-timestamptz
…ed-at-timestamptz
Partially resolves #9682 (will update users.last_seen_at in a separate PR).