这是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 … AS
或INSERT … RETURNING
相关的内容被更改或添加,但在我去那里之前我希望你们中的一个有经验和/或敬虔的google-fu来帮助我。
答案 0 :(得分:2)
在Postgres 9.1中引入了WITH中的数据修改语句