与INSERT和/或WITH相关的PostgreSQL语法错误。发生在8.4但不是9.1。想法?

时间:2014-05-10 02:23:40

标签: postgresql postgresql-9.1 sql-insert postgresql-8.4

这是PostgreSQL的一些SQL(我知道这是一个愚蠢的查询;我把原始查询简化为最简单的破解代码):

CREATE TABLE entity (
  id SERIAL PRIMARY KEY
);

  WITH new_entity
    AS (INSERT INTO entity DEFAULT VALUES
          RETURNING id
       )
SELECT id FROM new_entity;

这是在PostgreSQL 9.1上运行的:

psql:../sandbox/test.sql:3: NOTICE:  CREATE TABLE will create implicit sequence "entity_id_seq" for serial column "entity.id"
psql:../sandbox/test.sql:3: NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "entity_pkey" for table "entity"
CREATE TABLE
 id 
----
  1
(1 row)

这里它没有在PostgreSQL 8.4上运行:

psql:../sandbox/test.sql:3: NOTICE:  CREATE TABLE will create implicit sequence "entity_id_seq" for serial column "entity.id"
psql:../sandbox/test.sql:3: NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "entity_pkey" for table "entity"
CREATE TABLE
psql:../sandbox/test.sql:9: ERROR:  syntax error at or near "INSERT"
LINE 2:   AS (INSERT INTO entity DEFAULT VALUES

显然,在两种情况下表创建都很顺利,但它在PostgreSQL 8.4中的第二个查询中消失了。从此错误消息我无法准确收集问题所在。我不知道9.1具有什么,8.4没有可能导致此语法错误。 google it令人非常难过。我正在接近在8.4和9.1之间浏览PostgreSQL发行说明页面所需的绝望程度,并查明是否有任何与WITH … ASINSERT … RETURNING相关的内容被更改或添加,但在我去那里之前我希望你们中的一个有经验和/或敬虔的google-fu来帮助我。

1 个答案:

答案 0 :(得分:2)

在Postgres 9.1中引入了WITH中的数据修改语句