我有一个包含多个列的表,并希望使用INSERT
从RETURNING
查询中返回ID。不幸的是,在这种情况下,我必须指定所有列
INSERT INTO "user" ( "id", ... ) VALUES ( DEFAULT, ... ) RETURNING "id"
而不只是做
INSERT INTO "user" VALUES ( DEFAULT, ... ) RETURNING "id"
这使得查询非常长而且难以理解。我可以在不指定每一列的情况下以某种方式返回ID吗?
答案 0 :(得分:2)
当然你可以。你的第二个查询应该可行 - 只要id
实际上是表中的第一个位置 - 我怀疑。
验证:
SELECT attnum
FROM pg_attribute
WHERE attrelid = '"user"'::regclass
AND attname = 'id';
并不意味着你应该这样做。除了临时调用之外,只有少数情况下不将列列表附加到INSERT
命令。
无论哪种方式,您都不应该使用reserved word之类的user
作为表名。这是一个非常糟糕的主意。装载脚枪的经典案例。
答案 1 :(得分:0)
我无法重现这个问题。我正在运行PostgreSQL 9.1版,创建了一个包含users
和id
列的简单name
表。
然后我运行了这个查询:
INSERT INTO users VALUES(DEFAULT,'jszobody') RETURNING id
我在没有指定INSERT查询中的列的情况下返回了id
。它似乎刚刚起作用。
你得到什么错误?什么版本的PostgreSQL?您是否尝试过这样一个非常简单的测试用例,排除查询,默认值等任何其他问题?