1

我有一个包含多个列的表,并希望INSERT使用RETURNING. 不幸的是,在这种情况下,我似乎必须指定所有列

INSERT INTO "user" ( "id", ... ) VALUES ( DEFAULT, ... ) RETURNING "id"

而不仅仅是做

INSERT INTO "user" VALUES ( DEFAULT, ... ) RETURNING "id"

这使得查询非常长而且相当不可读。我可以在不指定每一列的情况下以某种方式返回 ID 吗?

4

2 回答 2

2

当然可以。您的第二个查询应该可以正常工作-前提是id实际上在表中具有第一个位置-我对此表示怀疑。

验证:

SELECT attnum
FROM   pg_attribute
WHERE  attrelid = '"user"'::regclass
AND    attname = 'id';

但这并不意味着你应该这样做。除了临时调用之外,只有少数情况下您不应该列列表附加到INSERT命令中。

无论哪种方式,您都不应该使用像表名这样的保留字。user这是一个非常糟糕的主意。装填脚枪的经典案例。

于 2013-03-30T15:30:38.587 回答
0

我无法重现该问题。我正在运行 PostgreSQL 9.1 版,创建了一个users包含列idname.

然后我运行了这个查询:

INSERT INTO users VALUES(DEFAULT,'jszobody') RETURNING id

id没有在 INSERT 查询中指定列就得到了回复。它似乎刚刚奏效。

你遇到了什么错误?什么版本的 PostgreSQL?您是否尝试过在这样一个非常简单的测试用例中重现,排除查询、默认值等的任何其他问题?

于 2013-03-30T15:27:58.200 回答