4

私はPostgreSQL 8.2(RETURNINGをサポートする最小バージョンである必要があります)を使用しています.GNU / Linuxでは正確に8.2.19です。主キーとしても制約されている自動的に挿入された列に戻り句を使用しようとしました。新しい行の挿入は正しく完了しましたが、返された結果は空です (pgAdmin のクエリ実行プログラムで検証済み)。暗黙的な挿入を試み、主キー列に DEFAULT も指定しました。

返そうとした列は次のように定義されています

al_id integer NOT NULL DEFAULT nextval(('"allarmi_al_id_seq"'::text)::regclass)

挿入クエリは次のようになります

INSERT INTO alarms (al_id, al_descr) 
     VALUES (DEFAULT, 'description') 
  RETURNING al_id;

allarmi_al_id_seqは明らかに (?) シーケンスであり、次のように定義されます。

CREATE SEQUENCE allarmi_al_id_seq
    INCREMENT 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    START 34564230
    CACHE 1;

どうしたの?

4

1 に答える 1

2

シーケンスの現在の値を明示的に読み取って、それを返すこともできます。

INSERT INTO alarms (al_id, al_descr) 
     VALUES (DEFAULT, 'description') 
  RETURNING currval('allarmi_al_id_seq') AS al_id;

currval 関数は、このセッションで最後に取得された値を返すため、同時実行性の問題はありません (シーケンスをインクリメントするトリガーがない限り)。

于 2013-09-09T11:31:10.360 に答える