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



我对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');

我为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';对我来说不是一个解决方案,因为它只在一个特定的会话中工作。此外,如果解决方案完全不依赖于服务器的本地时区,那就太好了

Thanks in advance

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

我猜在这种情况下你想写的是:

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

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

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

SET TIMEZONE TO 'GMT';就可以了。

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

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

ALTER DATABASE ...设置数据库级别。如果你把它换进去postgresql.conf它是全局的。

相关内容

  • 没有找到相关文章

最新更新