diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 39a2849eba..cbd401a716 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -13148,7 +13148,7 @@ ConstInterval: opt_timezone: WITH_LA TIME ZONE { $$ = true; } | WITHOUT TIME ZONE { $$ = false; } - | /*EMPTY*/ { $$ = false; } + | /*EMPTY*/ { $$ = default_timestamp_with_timezone; } ; opt_interval: diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index cb3fa85892..e7a26e18a1 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -31,6 +31,8 @@ #include "utils/memutils.h" #include "utils/tzparser.h" +bool default_timestamp_with_timezone = false; + static int DecodeNumber(int flen, char *field, bool haveTextMonth, int fmask, int *tmask, struct pg_tm *tm, fsec_t *fsec, bool *is2digits); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index a2e0f8de7e..d70185d74c 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2098,6 +2098,15 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, + { + {"default_timestamp_with_timezone", PGC_USERSET, CLIENT_CONN_STATEMENT, + gettext_noop("Whether to take TIMESTAMP to mean TIMESTAMP WITH TIME ZONE, or not."), + }, + &default_timestamp_with_timezone, + false, + NULL, NULL, NULL + }, + { {"data_sync_retry", PGC_POSTMASTER, ERROR_HANDLING_OPTIONS, gettext_noop("Whether to continue running after a failure to sync data files."), diff --git a/src/include/utils/datetime.h b/src/include/utils/datetime.h index b56086c9d6..d62a39520a 100644 --- a/src/include/utils/datetime.h +++ b/src/include/utils/datetime.h @@ -22,6 +22,7 @@ /* this struct is declared in utils/tzparser.h: */ struct tzEntry; +extern bool default_timestamp_with_timezone; /* ---------------------------------------------------------------- * time types + support macros diff --git a/src/test/regress/expected/timestamptz.out b/src/test/regress/expected/timestamptz.out index 990c4eddf1..74ae1ac097 100644 --- a/src/test/regress/expected/timestamptz.out +++ b/src/test/regress/expected/timestamptz.out @@ -2929,3 +2929,21 @@ select * from tmptz where f1 at time zone 'utc' = '2017-01-18 00:00'; Tue Jan 17 16:00:00 2017 PST (1 row) +BEGIN; +CREATE TABLE tzz_test (col1 TIMESTAMP); +\d tzz_test + Table "public.tzz_test" + Column | Type | Collation | Nullable | Default +--------+-----------------------------+-----------+----------+--------- + col1 | timestamp without time zone | | | + +DROP TABLE tzz_test; +SET LOCAL default_timestamp_with_timezone = true; +CREATE TABLE tzz_test (col1 TIMESTAMP); +\d tzz_test + Table "public.tzz_test" + Column | Type | Collation | Nullable | Default +--------+--------------------------+-----------+----------+--------- + col1 | timestamp with time zone | | | + +ROLLBACK; diff --git a/src/test/regress/sql/timestamptz.sql b/src/test/regress/sql/timestamptz.sql index b18821de53..1b323ba112 100644 --- a/src/test/regress/sql/timestamptz.sql +++ b/src/test/regress/sql/timestamptz.sql @@ -551,3 +551,12 @@ insert into tmptz values ('2017-01-18 00:00+00'); explain (costs off) select * from tmptz where f1 at time zone 'utc' = '2017-01-18 00:00'; select * from tmptz where f1 at time zone 'utc' = '2017-01-18 00:00'; + +BEGIN; +CREATE TABLE tzz_test (col1 TIMESTAMP); +\d tzz_test +DROP TABLE tzz_test; +SET LOCAL default_timestamp_with_timezone = true; +CREATE TABLE tzz_test (col1 TIMESTAMP); +\d tzz_test +ROLLBACK;