この記事の所要時間: 約 1分31秒
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にして対応しました。
- Newer: カフェで仕事する
- Older: 懇親会を楽しむ5つの方法
トラックバック:0
- このエントリーのトラックバックURL
- /blog/2007/08/pgsql81_oid.html/trackback
- Listed below are links to weblogs that reference
- PostgreSQL8.1以降はoidに注意 from Shin x blog