diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 1525d2a..7bfb867 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -4576,7 +4576,7 @@ timestamp_part(PG_FUNCTION_ARGS) { case DTK_EPOCH: #ifdef HAVE_INT64_TIMESTAMP - result = (timestamp - SetEpochTimestamp()) / 1000000.0; + result = ((float8)timestamp - SetEpochTimestamp()) / 1000000.0; #else result = timestamp - SetEpochTimestamp(); #endif @@ -4793,7 +4793,7 @@ timestamptz_part(PG_FUNCTION_ARGS) { case DTK_EPOCH: #ifdef HAVE_INT64_TIMESTAMP - result = (timestamp - SetEpochTimestamp()) / 1000000.0; + result = ((float8)timestamp - SetEpochTimestamp()) / 1000000.0; #else result = timestamp - SetEpochTimestamp(); #endif diff --git a/src/test/regress/expected/date.out b/src/test/regress/expected/date.out index 56c5520..4306a5c 100644 --- a/src/test/regress/expected/date.out +++ b/src/test/regress/expected/date.out @@ -920,6 +920,18 @@ SELECT EXTRACT(EPOCH FROM TIMESTAMPTZ '1970-01-01+00'); -- 0 0 (1 row) +SELECT EXTRACT(EPOCH FROM TIMESTAMP '294277-01-09 04:00:54.775806'); -- 9224318721654.78 + date_part +------------------ + 9224318721654.78 +(1 row) + +SELECT EXTRACT(EPOCH FROM TIMESTAMPTZ '294277-01-09 04:00:54.775806+00'); -- 9224318721654.78 + date_part +------------------ + 9224318721654.78 +(1 row) + -- -- century -- diff --git a/src/test/regress/sql/date.sql b/src/test/regress/sql/date.sql index e40b4c4..21d9997 100644 --- a/src/test/regress/sql/date.sql +++ b/src/test/regress/sql/date.sql @@ -217,6 +217,8 @@ SELECT date 'tomorrow' - date 'yesterday' AS "Two days"; SELECT EXTRACT(EPOCH FROM DATE '1970-01-01'); -- 0 SELECT EXTRACT(EPOCH FROM TIMESTAMP '1970-01-01'); -- 0 SELECT EXTRACT(EPOCH FROM TIMESTAMPTZ '1970-01-01+00'); -- 0 +SELECT EXTRACT(EPOCH FROM TIMESTAMP '294277-01-09 04:00:54.775806'); -- 9224318721654.78 +SELECT EXTRACT(EPOCH FROM TIMESTAMPTZ '294277-01-09 04:00:54.775806+00'); -- 9224318721654.78 -- -- century --