2

我正在对 postgreSQL 8.2 的分叉 MPP 版本尝试一个非常简单的测试查询,我试图弄清楚这是否是预期的行为。

当我使用 current_date 为单行执行插入语句时,我得到当前日期的预期输出:

create table test( t_date timestamp without time zone);

insert into test(  t_date)
VALUES
(
current_date::date
),


 db=> select * from test ;
           t_date        
    ---------------------
     2013-08-19 00:00:00
    (1 row)

但是当我在插入语句中添加多行时,我得到了一个意想不到的结果——这是标准的一部分吗?

insert into test(  t_date)
VALUES
(
current_date::date
),
(
current_date::date
);

   db=>  select * from test ;
           t_date        
    ---------------------
     1999-12-31 00:00:00
     1999-12-31 00:00:00
    (2 rows)

我的问题是:为什么当我使用 current_date::date 时第一个插入语句输出正确的日期,而当我使用相同的 current_date::date 转换时第二个插入输出两个不正确的日期?

4

2 回答 2

2

这个结果是不正确的、出乎意料的和奇怪的。

PostgreSQL 9.2.4 产生正确的结果。

regress=> select * from test;
       t_date        
---------------------
 2013-08-20 00:00:00
 2013-08-20 00:00:00
(2 rows)

8.3 也是如此,这是我可以打扰测试的最旧版本

无论您使用的是什么补丁/破解版本的 PostgreSQL,都引入了一个错误。

于 2013-08-20T04:20:00.840 回答
0

是的,这是 Postgresql 的一个特性,它允许使用 VALUES 子句“批量”加载。 http://www.postgresql.org/docs/8.2/static/sql-insert.html

请参阅以下部分:

要使用多行 VALUES 语法插入多行:

于 2013-08-20T04:10:52.620 回答