PostgreSQLにおけるauto_increment型の追加方法と対処方法

このQ&Aのポイント
  • phpPgAdminを使用してPostgreSQLのテーブル定義を行っています。auto_increment型の項目を追加したい場合、MySQLのようなauto_increment型は存在しません。代わりに、一般的な方法としては、シーケンスとトリガーを使用して自動的に連番を生成する方法があります。テーブルにシーケンスを作成し、それを利用して新しい行を挿入する際に自動的に連番を生成することができます。
  • auto_increment型が存在しない場合の対処方法として、シーケンスを使用する方法が一般的です。シーケンスは一意の連番を生成するために使用され、テーブルに対してトリガーを作成することで、新しい行が挿入されるたびにシーケンスが自動的に更新されます。この方法により、自動的に連番を生成することができます。
  • 以上の点をまとめると、PostgreSQLではauto_increment型は存在せず、代わりにシーケンスとトリガーを使用して自動的に連番を生成する方法が一般的です。テーブルにシーケンスを作成し、トリガーを作成して更新される度にシーケンスを自動的にインクリメントすることができます。
回答を見る
  • ベストアンサー

auto_increment型

phpPgAdmin上から、テーブル定義を行っています。 テーブルの中へ、auto_increment型の項目を追加したいと 考えております。 MySQLには、auto_increment型が存在しますが、PostgreSQLの場合 には、同じような型があるのでしょうか?もし、ない場合には、 一般的にどのような対応をしているのでしょうか?(例えば、 Insertする際にPGの中でincrementしているのでしょうか?) (1)auto_increment型の追加方法 (2)auto_increment型がない場合の、対処方法 以上の点に関して、お分かりになる方がいらっしゃいましたら、 ご教示をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

PostgreSQLには、「SERIAL」というデータ型があり、これがMySQLのauto_incrementに相当します。 いくつかの商用RDBMSと同じように、CREATE SEQUENCEもサポートされています。 既存の表に列を追加する場合、SQLでなら 「ALTER TABLE 表名 ADD COLUMN 列名 SERIAL」 で行えます。

参考URL:
http://www.postgresql.jp/document/pg814doc/html/datatype.html#DATATYPE-SERIAL
haven3
質問者

お礼

どうもありがとうございます。 本をみても、発見できなかったので助かりました。

関連するQ&A

  • auto_incrementの値の取りだし方

    またまたお世話になります。 いつも秒殺質問ばかりしているnak205です。 いまPHPとMySQLでフォームから受付を行い、auto_incrementで発行した受付番号を受付完了画面に表示させるようなものを使っています。 そこで困っているのが、MySQLにデータをINSERTしたあと、どうやって正確にインクリメントされたばかりの受付番号を得ればいいかというところです。 データをINSERTしたあと、受付番号を得るSQLを発行してる間に他の受付が入ってしまえば数字がずれてしまいますよね。INSERTと同時にauto_incrementで出来た数字の値を得る関数がPHPかMySQL側にありますか? 受付番号だけ別テーブルに置いてauto_incrementではなく、PHPで管理したほうが良いんでしょうか?

    • ベストアンサー
    • PHP
  • AUTO_INCREMENTの扱いについて

    MySQL 5.6を使用しています。 ユーザーテーブルがあるとします。 ユーザーテーブルにある「ユーザーID」はinsert時にAUTO_INCREMENTで自動採番されます。 ユーザーテーブルの別のカラムで「作成ユーザID」というカラムがあります。insertしたユーザーのユーザーIDを保持するカラムです。 すでにユーザーテーブルにいるユーザー(管理者)がinsertした場合はいいのですが、 自信で自分のユーザーを登録できる機能もあります。 その場合、まだ作成されてないユーザID(AUTO_INCREMENTで自動採番されるユーザーID)をどうやって参照したらいいでしょうか?

    • ベストアンサー
    • MySQL
  • AUTO_INCREMENTの動作について

    mysqlデータベースのAUTO INCREMENT値に関する質問です。 一時的なテーブルにデータを格納し、必要な操作が終わったらほかのテーブルに移し、一時的なテーブルの中のエントリを削除する設定なんですが、AUTO_INCREMENTは30まで登りましたが、29以下のエントリは既に削除しています。そうすると、新しいエントリを挿入すると、信じられないことに、31を識別子として挿入してくれなくて、15挿入されてしまいました! データを移すときに、その番号を識別子として使いますので大問題になっています。それはAUTO_INCREMENTの正常な動作ですか??避けることはできるのでしょうか? 詳しい方がいらっしゃいましたら、ご回答をよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SQLite(3.2.2)でauto_increment

    今、SQLiteを利用してつまづいています。 バージョンは3.2.2です。(Linux) MySQL、PostgreSQLの知識はあります。 プライマリーキー(id)にシリアルを作成しようと思い、http://cl.pocari.org/2006-02-12-1.html を参考にしながらテーブルを作りました。 CREATE TABLE bbs ( id INTEGER UNSIGNED NOT NULL PRIMARY KEY, name VARCHAR(255) NOT NULL, message TEXT NOT NULL, last_update TIMESTAMP NOT NULL ); このbbsテーブルに対し、 INSERT INTO bbs (name,message,last_update) VALUES ('name','message','2008-04-03 12:11:00'); というクエリを発行すると 「SQL error: bbs.id may not be NULL」 とういエラーが返ってきます。 確かに、bbsテーブルのidカラムは「NOT NULL」制約があるのでエラーが正しいとは思うのですが、参考URLのauto_incrementの作成方法には、auto_incrementにしたいカラムをPRIMARY KEYでやればできる、のような事が書いてあったので、よく分かりません。 バージョンの問題なのか、クエリに誤りがあるのか分かる方おられましたら解答お願いします。 また、auto_incrementなカラムの作成方法も一緒に教えていただけたら幸いです。 宜しくお願いします。

  • AUTO_INCREMENT の値をINSERT前に知りたい

    PHP(PEAR)+MYSQLでWEBアプリを作成しているのですが、AUTO_INCREMENTを設定した値をデータのINSERTを行う前に取得したいのですが、どのようにすればいいのでしょうか?INSERT後であればLAST_INSERT_ID()やmysql_insert_id()で取得できるのは分かっているのですが…。ちなみに現在のテーブル型はInnoDBです。MySQLもしくはPearの命令でお分かりになる方お教えください。よろしくお願いします。

  • AUTO_INCREMENTを2つ設定する方法

    お世話になっております。 現在すでに投稿されている記事を複製する処理をphpで作成しています。 linkmetaというテーブル内のid、link_idというカラムがありidはAUTO_INCREMENTとなっています。 link_idにもAUTO_INCREMENTを設定したいのですが調べるとそれは仕様により不可能ということがわかりました。 現在link_idにもidと同じ値を自動的に挿入したいと考えております。 別の手段でlink_idにAUTO_INCREMENTもしくは同様のINSERTを行う方法はありませんでしょうか? idの数値を取得しようと考えたのですが INSERT前ではAUTO_INCREMENT後の値は取得できない事に後から気づきました。 この様に1つのテーブルに値が重複しない様にする処理は皆様はどのように行なっているのでしょうか? 良い方法は思いつかずに困っております。 どなたかご回答くださいませ。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • MySQLのauto incrementについて

    宜しくお願い致します。 MySQLでカラムにauto incrementの属性を付けたいのですが、primary_keyに指定せずにauto increment属性をつける方法はないのでしょうか?

    • ベストアンサー
    • MySQL
  • オートインクリメントの最新の値

    いずれかの方法で、オートインクリメントで記録している数字の最新のものを取得したいです。 (PHP/MySQL) 考えているのは オートインクリメントのフィールドの中から一番大きいものを取得 という方法ですが、WHEREの条件式をどのように書けばいいかがわかりません。 また、他にいい方法があれば教えていただきたいです。

    • ベストアンサー
    • MySQL
  • auto_incrementフィールドの書込み内容を知る方法

    auto_incrementの属性を持つフィールド(以後、id)を含むテーブルへ、書込みを行った場合、idフィールドには空番号が自動で付与されて書き込まれると思いますが、書き込まれた番号を効率的に知る方法はありますでしょうか。 例:id(auto_increment)、data1(char)のテーブルに対して、 data1に『AAA』をinsertした直後に、自動で付与されたid値を知りたい。 データをinsertした直後に最老番を調べる方法では、データのinsertが多数して行われた場合に、値がずれる恐れがあります。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • auto_incrementについて困っています。

    画面上で商品の新規登録するときに、auto_incrementを設定したidが主キーの”商品テーブル”と商品テーブルのidを外部参照して主キーとする”商品詳細テーブル”を使うのですが、商品詳細テーブルでのinsert文はどうすればよいでしょうか?商品の新規登録の時に商品詳細テーブルでは、idを自動的に設定したいのですが・・・、