50

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

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

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

alter sequence public.sequenceX restart with (select max(table_id)+1 from table)
4

2 に答える 2

88

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

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

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

于 2010-01-07T18:56:26.520 に答える
8

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

ERROR: relation "public.mytable_id_seq" does not exist

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

select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))
于 2013-03-01T16:41:19.953 に答える