1

いくつかの列を持つテーブルがあり、INSERTを使用してクエリから ID を返したいと考えていますRETURNING。残念ながら、この場合、すべての列を指定する必要があるようです

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

ただするのではなく

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

これにより、クエリが非常に長くなり、かなり読みにくくなります。すべての列を指定せずに ID を返すことはできますか?

4

2 に答える 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

idINSERT クエリで列を指定せずに戻ってきました。ちょうどうまくいったようです。

どのようなエラーが発生していますか? PostgreSQL のバージョンは? このような非常に単純なテスト ケースを再現して、クエリやデフォルト値などに関する他の問題を除外してみましたか?

于 2013-03-30T15:27:58.200 に答える