Home > PHP | Web+DB > PostgreSQL8.1以降はoidに注意

PostgreSQL8.1以降はoidに注意

この記事の所要時間: 131

PostgreSQL8.1以降はデフォルトではテーブルにoid列が存在しません。

このままだとPHP側からINSERTした後、pg_last_oid()で追加したレコードのoidを取り、それを使って追加したレコードをSELECTで読み込むという方法が使えません。

過去のアプリケーションを移行するなどしてoid列が必要な場合はテーブルを作成する際に以下のような方法を取る必要があります。

1. default_with_oidsをOnにする

postgresql.confにあるdefault_with_oidsをonに設定する(デフォルトはoff)とそれ以降に作成したテーブルにはoid列が生成されます。

default_with_oids = On

default_with_oidsはset文でも設定可能です。この場合設定したセッション内でのみ有効となります。

set default_with_oids = On;

2. CREATE TABLE文にWITH OIDSを付ける

CREATE TABLE文でテーブルを作成する際にWITH OIDSを付けておくとdefault_with_oidsの設定に関わらず、oid列が生成されます。

create table test(id int) with oids;

先日とあるアプリケーションをPostgreSQL7.2から8.1に移行した際にこの問題が発生しました。シーケンスから直前に追加された値を取得するなど他の方法もあったのですが、PHP側を変更したくなかったので、default_with_oids=onにして対応しました。

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2007/08/pgsql81_oid.html/trackback
Listed below are links to weblogs that reference
PostgreSQL8.1以降はoidに注意 from Shin x blog

Home > PHP | Web+DB > PostgreSQL8.1以降はoidに注意

検索
フィード
メタ情報

Return to page top