web-dev-qa-db-ja.com

postgresの自動インクリメントカウンターをリセットする

テーブルの自動増分フィールドを強制的に何らかの値にしたいので、これを試しました:

ALTER TABLE product AUTO_INCREMENT = 1453

そして

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

私はpostgresが初めてです:(

productおよびIdフィールドを持つテーブルnameがあります

179
Rad

product列を持つテーブルidを作成した場合、シーケンスは単にproductと呼ばれるのではなく、product_id_seq(つまり、${table}_${column}_seq)と呼ばれます。

これは、必要なALTER SEQUENCEコマンドです。

ALTER SEQUENCE product_id_seq RESTART WITH 1453

Psqlの\dsコマンドを使用して、データベース内のシーケンスを表示できます。 \d productを実行し、列のデフォルトの制約を確認すると、nextval(...)呼び出しでシーケンス名も指定されます。

220
araqnid

Productテーブルのシーケンスがproduct_id_seqであると仮定して、探しているコマンドは次のとおりです。

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

139
matt snider

次のコマンドは、これを自動的に行います。これにより、テーブル内のすべてのデータも削除されます。注意してください。

TRUNCATE TABLE someTable RESTART IDENTITY;
109
Loolooii

シーケンスカウンターを設定するには:

setval('product_id_seq', 1453);

シーケンス名がわからない場合は、pg_get_serial_sequence関数を使用します。

select pg_get_serial_sequence('product', 'id');
 pg_get_serial_sequence 
------------------------
 public.product_id_seq

パラメーターは、テーブル名と列名です。

または、単にpsqlプロンプトで\d productを発行します。

=> \d product
                         Table "public.product"
 Column |  Type   |                      Modifiers                       
--------+---------+------------------------------------------------------
 id     | integer | not null default nextval('product_id_seq'::regclass)
 name   | text    | 
52
Clodoaldo Neto

訪問者の便宜のためにコメントから変換(

このメッセージから、正しい構文が何であるかは明確ではありません。それは:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;
12
Anwar

Reset GUIから自動インクリメントする場合は、次の手順に従います。

  1. データベースに移動します
  2. パブリックをクリックします
  3. テーブルリストページでは、TABS like 'Tables'、 'Views'、 'Sequences' like likeを確認できます。
  4. シーケンスをクリックします
  5. 「Sequences」をクリックすると、すべてのシーケンスリストが表示されます。必要なものをクリックしますReset
  6. その後、「変更」、「値の設定」、「再起動」、「リセット」などの複数の選択肢が表示されます。
  7. Resetをクリックして、新しい行を1つ追加します。
3
Chaudhary

次の値をリセットするIDENTITY列を持つテーブルがある場合、次のコマンドを使用できます。

ALTER TABLE ALTER COLUMN RESTART WITH;

2
BrianB

-シーケンスの開始値を変更する

ALTER SEQUENCE project_id_seq RESTART 3000;

同じが動的:

SELECT SETVAL( 'project_id_seq'、(SELECT MAX(id)+ 1 FROM project));

SELECTの使用は邪魔ですが、うまくいきます。

ソース: https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment

2
Wiwwil

自動インクリメントをリセットするには、次のクエリを使用してシーケンス名を取得する必要があります。

構文:

SELECT pg_get_serial_sequence(‘tablename’, ‘ columnname‘);

例:

SELECT pg_get_serial_sequence('demo', 'autoid');

クエリは、autoidのシーケンス名を"Demo_autoid_seq"として返します。次に、次のクエリを使用してautoidをリセットします

構文:

ALTER SEQUENCE sequenceName RESTART WITH value;

例:

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;
2
vinoth shankar

シーケンスIDを取得するには

SELECT pg_get_serial_sequence('tableName', 'ColumnName');

これにより、tableName_ColumnName_seqとしてシーケンスIDが得られます。

最後のシード番号を取得するには

select currval(pg_get_serial_sequence('tableName', 'ColumnName'));

または、シーケンスIDが既に直接使用されていることがわかっている場合。

select currval(tableName_ColumnName_seq);

最後のシード番号が表示されます

シード番号をリセットするには

ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45
1
Raja A