PostgreSQLで主キーの自動インクリメントを設定する方法は?
PostgreSQLに22のカラムを持つテーブルがあり、自動インクリメントの主キーを追加したいのですが、どうすればよいですか?
BIGSERIAL 型の id
というカラムを作成しようとしましたが、pgadmin はエラーで応答しました。
ERROR: sequence must have same owner as table it is linked to.
この問題を解決する方法をご存知の方はいらっしゃいますか? PostgreSQLでテーブルを再作成せずに自動インクリメントの主キーを作成するにはどうすればよいですか?
251
7
このコマンドを試してみてください。
テーブルを*作成したユーザーと同じDB-userで試してみてください。
postgresql で主キーを自動インクリメントする。
ステップ1, テーブルの作成:.
**最初のパラメータリストでmytable_keyが指定されていないことに注意してください、これはデフォルトのシーケンスがオートインクリメントになる原因です。
*ステップ3、テーブルからを選択します:**。
ステップ4、出力を解釈する:。
mytable_keyカラムが自動インクリメントされていることを確認してください。
プロヒント:
postgresql は挿入、削除、更新、選択の速度を上げるために内部的にハッシュテーブル構造を使用するため、テーブルには常に主キーを使用すべきです。 もし主キーカラム(強制的にユニークで非NULL)が利用可能であれば、ハッシュ関数にユニークな種を提供するために依存することができる。 主キーカラムがない場合、ハッシュ関数は他のカラムをキーとして選択するため、非効率になる。
カスタムシーケンスを使用して、Postgresqlで自動インクリメントの主キーを作成します:。
ステップ1、シーケンスを作成する:。
ステップ2、テーブルを作成する。
ステップ3、テーブルへの挿入。
ステップ4、行を観察する。
この2つの行は、シーケンスで定義されたように、1から始まり1ずつ増加するキーを持つ。
ボーナスエリートProTip:。
プログラマはタイピングが嫌いなので、
nextval('splog_adfarm_seq')
を打ち出すのは煩わしいです。 代わりにそのパラメータにDEFAULT
と入力することができます、このように。上記を動作させるには、splog_adfarm テーブルの key カラムにデフォルト値を定義する必要があります。 どちらがきれいでしょう。
これをpgadminで実行したい場合は、はるかに簡単です。 postgressqlでは、列に自動増分を追加するには、最初に自動増分シーケンスを作成して、必要な列に追加する必要があります。 私はこれが好きでした。
1)まず、テーブルの主要なキーがあることを確認する必要があります。 また、主キーのデータ型をbigintまたはsmallintに保持します。 (私はbigintを使用しましたが、他の回答で述べたようにシリアルと呼ばれるデータ型を見つけることができませんでした)。
2)次に、sequence->を右クリックしてシーケンスを追加します。 新しいシーケンスを追加。 テーブルにデータがない場合は、シーケンスをそのままにして、変更を行わないでください。 保存してください。 既存のデータがある場合は、以下に示すように、主キー列の最後または最も高い値を[定義]タブの[現在の値]に追加します。 。![ここに画像の説明を入力してください](http://i.stack.imgur.com/JH8tQ.png。)。
3)最後に、以下に示すように、プライマリキーのデフォルト値に「nextval( 'your_sequence_name' :: regclass)」行を追加します。
。![ここに画像の説明を入力してください](http://i.stack.imgur.com/tTZjd.png。)。 ここでシーケンス名が正しいことを確認してください。 これがすべてであり、自動増分は機能するはずです。
数値をシーケンスで使用する場合は、次のような新しいシーケンスを定義します。
次に、テーブルを変更して、id :のシーケンスを使用します。
多分私はこの質問に答えるのに少し遅れますが、私は私の仕事でこの問題に取り組んでいます:)。
列「a_code」= c1、c2、c3、c4を書きたかった。..
まず、「ref_id」という名前と「serial」というタイプの列を開きました。 次に、このコマンドの問題を解決しました。
PostgreSQLの主キーを正常に自動インクリメントするために、次のスクリプトを試しました。