[PostgreSQL][8.0.4] シーケンス関数の引数は regclass型ではなく text型 (ERROR: cannot cast type text to regclass)

Tadashi Shigeoka ·  Fri, March 2, 2012

PostgreSQL 8.0.4 にて、nextval((‘user_id_seq’::text)::regclass) というように、シーケンス関数の引数を text型ではなく、regclass型を渡してしまったため、エラーが発生しました。

■ エラー内容

ERROR:  cannot cast type text to regclass

■ 参考情報

注意: PostgreSQL 8.1以前においては、シーケンス関数の引数はregclass型ではなく、text型で、そして上記のテキスト文字列からOID値への変換はそれぞれの呼び出し実行時に起こりました。後方互換性のため、この仕組みはまだ存在しますが、内部的には関数が実行される前にtextからregclassへの暗黙的強制型変換として現在処理されています。

・引用元:シーケンス操作関数 はてなブックマーク - シーケンス操作関数

■ SQL文(修正前)

CREATE SEQUENCE user_id_seq INCREMENT 1 START 1000;

CREATE TABLE user ( 
  id integer DEFAULT nextval(('user_id_seq'::text)::regclass) NOT NULL,
  name varchar(50) NOT NULL,
  age integer NOT NULL
);

↓(修正)

■ SQL文(修正後)

CREATE SEQUENCE user_id_seq INCREMENT 1 START 1000;

CREATE TABLE user ( 
  id integer DEFAULT nextval('user_id_seq') NOT NULL,
  name varchar(50) NOT NULL,
  age integer NOT NULL
);

以上です。