satellite/satellitedb: do better ::date conversions
There is a subtle problem when one does a cast with `::date`. Observe: teststorj=# set timezone = 'US/Eastern'; SET teststorj=# select (timestamp with time zone '2020-02-01 00:00:00+00')::date; date ------------ 2020-01-31 (1 row) teststorj=# set timezone = 'UTC'; SET teststorj=# select (timestamp with time zone '2020-02-01 00:00:00+00')::date; date ------------ 2020-02-01 (1 row) In order to correctly determine the date a timestamp is in, one has to explicitly pick the time zone that the date truncation should use otherwise postgres will use whatever setting the client has. These tests were failing for me locally, because I run my postgres in the US/Eastern time zone to try to tickle these bugs out. So it should be `(x at time zone 'UTC')::date` instead of just `x::date`. Change-Id: I4e9e32d4b53abc6165a4d0474f4702f8b9f801c7
This commit is contained in:
parent
75ddecdf54
commit
6352d46100
@ -286,22 +286,22 @@ func (db *StoragenodeAccounting) QueryStorageNodeUsage(ctx context.Context, node
|
||||
start, end = start.UTC(), end.UTC()
|
||||
|
||||
query := `
|
||||
SELECT at_rest_total, start_time::date
|
||||
SELECT at_rest_total, (start_time at time zone 'UTC')::date as start_time
|
||||
FROM accounting_rollups
|
||||
WHERE node_id = $1
|
||||
AND $2 <= start_time AND start_time <= $3
|
||||
UNION
|
||||
SELECT SUM(data_total) AS at_rest_total, interval_end_time::date AS start_time
|
||||
SELECT SUM(data_total) AS at_rest_total, (interval_end_time at time zone 'UTC')::date AS start_time
|
||||
FROM storagenode_storage_tallies
|
||||
WHERE node_id = $1
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM accounting_rollups
|
||||
WHERE node_id = $1
|
||||
AND $2 <= start_time AND start_time <= $3
|
||||
AND start_time::date = interval_end_time::date
|
||||
AND (start_time at time zone 'UTC')::date = (interval_end_time at time zone 'UTC')::date
|
||||
)
|
||||
AND (SELECT value FROM accounting_timestamps WHERE name = $4) < interval_end_time AND interval_end_time <= $3
|
||||
GROUP BY interval_end_time::date
|
||||
GROUP BY (interval_end_time at time zone 'UTC')::date
|
||||
ORDER BY start_time;
|
||||
`
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user