Postgresql:在表创建期间分配默认时区

时间:2013-06-03 17:24:11

标签: java sql postgresql jdbc timezone

我有employees table

的以下定义
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');

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

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';对我来说不是解决方案,因为它仅适用于特定会话。此外,如果解决方案根本不依赖于服务器的本地时区,那将会很棒

提前致谢

2 个答案:

答案 0 :(得分:1)

时区是会话参数。设置会话的TIMEZONE相对简单。另请参阅:postgres default timezone

SET TIMEZONE TO 'GMT';会做到这一点。

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

编辑2:正如Craig Ringer所说,以下似乎是您正在寻找的。

  

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

答案 1 :(得分:1)

日期,时间和时间戳在SQL中非常笨拙。

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

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

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