PostgreSQLの「column “oid” does not exist」エラー

【PR】
※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。

上記サイトより

8.1以降のPostgreSQLでは、デフォルトではテーブルにoidが含まれなくなる模様。oidが存在すること前提で書いてあったスクリプトで“column “oid" does not exist”というエラーが発生した。これは default_with_oids がデフォルトONからOFFになったため

対応としては、スクリプトを書き換えるのが一番だが、対症療法としては以下。

ALTER TABLE hogehoge SET WITH OIDS;

次回同じ作業をする場合は、(CREATE TABLEする前に、というかpostgresを起動する前に)postgresql.confの default_with_oids をONにしておけばよい。

https://www.postgresql.jp/document/7.3/user/datatype-oid.html#:~:text=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E8%AD%98%E5%88%A5%E5%AD%90%20(OID)%20%E3%81%AF%20PostgreSQL,%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E8%AD%98%E5%88%A5%E5%AD%90%E3%82%92%E8%A1%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

上記サイトより
PostgresのOIDとは何ですか?
オブジェクト識別子 (OID) は PostgreSQL の内部でさまざまなシステムテーブルのプライマリキーとして使用されます。 また、OID システム列がユーザ作成のテーブルに追加されます (テーブルの作成時に WITHOUT OIDS が指定されていない場合)。 データ型 oid はオブジェクト識別子を表します。

 

PotgreSQL8.1以降のdefault_with_oidsパラメータについての記事↓

https://www.1×1.jp/blog/2007/08/pgsql81_oid.html

ちなみに、このエラーはPostgreSQLに対して実行するSQLツールによっても、発生したりしなかったりもするらしい。

Tips

Posted by admin