0

我有以下employees表定义

CREATE TABLE employees
(
  id integer NOT NULL,
  name text,
  withouttz timestamp without time zone,
  withtz timestamp with time zone,
  CONSTRAINT primarykey_emp PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE employees
  OWNER TO chris;

我通过以下方式插入了两条记录:

INSERT INTO employees(
            id, name, withouttz, withtz)
    VALUES (1, 'test', '2011-01-01 00:00:00', '2011-01-01 12:00:00+03');

INSERT INTO employees(
            id, name, withouttz, withtz)
    VALUES (2, 'test', '2011-01-01 00:00:00', '2011-01-01 12:00:00');

我编写了简单的 java 类,select * from employees它输出以下内容:

col1: 1
col2: test
col3: 2011-01-01 00:00:00
col4: 2011-01-01 07:00:00-8:00

col1: 2
col2: test
col3: 2011-01-01 00:00:00
col4: 2011-01-01 12:00:00-8:00

问题:有没有办法创建一个 postgres 表timestamp with time zone,以便它认为时区是 UTC 而不是服务器的本地时区?

注意:set timezone TO 'GMT';对我来说不是解决方案,因为它仅在特定会话中有效。此外,如果解决方案完全不依赖于服务器的本地时区,那就太好了

提前致谢

4

2 回答 2

1

日期、时间和时间戳在 SQL 中相当笨拙。

我怀疑在这种情况下你想要写的是:

TIMESTAMP 'blah blha blah' AT TIME ZONE 'UTC'

这将定义一个本地时间时间戳(不受转换),然后明确地将其视为 UTC 时间的时间戳。

于 2013-06-03T23:58:39.037 回答
1

时区是一个会话参数。设置会话的 TIMEZONE 相对简单。另请参阅:postgres 默认时区

SET TIMEZONE TO 'GMT';会成功的。

编辑:我想你可以试试AT TIMEZONE 'GMT';,但我不确定两者之间的区别。

编辑2:正如克雷格林格所说,以下似乎是您正在寻找的。

ALTER DATABASE ...设置它的数据库级别。如果你改变它 postgresql.conf是全局的。有关详细信息,请参阅手册。

于 2013-06-03T17:32:29.573 回答