web-dev-qa-db-ja.com

Postgresql-シーケンス式の変更でサブクエリを使用する

私の質問はちょっと簡単です。

PostgreSQLのalterexpression内でサブクエリを使用することは可能ですか?

主キー列の値に基づいてシーケンス値を変更したい。

次の式を使ってみましたが、実行されませんでした。

シーケンスの変更public.sequenceXrestart with(select max(table_id)+1 from table)

前もって感謝します

42
Danmaxis

私はあなたがそのようにそれをすることができるとは思わないが、あなたは変更がすることであるsetval関数方向を使うことができるはずである。

select setval('sequenceX', (select max(table_id)+1 from table), false)

Falseを指定すると、指定されたとおりに次のシーケンス番号が返されます。

80
Arthur Thomas

さらに、大文字と小文字が混在するオブジェクト名があり、次のようなエラーが発生した場合:

ERROR: relation "public.mytable_id_seq" does not exist

... regclassを使用する次のバージョンが役立つはずです。

select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))
6
Duncan Smart