• ベストアンサー

PerlDBIでのserial型の使い方

PostgreSQLの8.0.2をPerlを使い、PerlDBIとして使っています。 自動的に番号をカウントアップしながら付与してくれる列を作りたくて、テーブル作成時にserial型を指定しました。 ところが、INSERTの際にその項目になんと入力していいのかわかりません。 省略すれば勝手に入ってくれるのかと思ったら permission denied for sequence filetable_fileno_seq at dbupdate.pl 155 とエラーが出てしまいます。 その155行目には $sth = $dbh->do("insert into $table values ('$list[$count]->[0]','$list[$count]->[1]','$list[$count]->[2]','$today','$today')"); といれています。 ちなみにテーブルは text、text、real、date、date、serial というならびになっています。 serialの列を入れる前までは上のSQL文で問題なかったのですが、serial型の列を追加してからは上記のようなエラーが出るようになりました。 何が原因なのかさっぱりわかりません。 教えていただければ幸いです

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

  • ベストアンサー
  • hok212
  • ベストアンサー率66% (100/150)
回答No.2

permission denied と言われているので、その SEQUENCE を作成したユーザ以外の権限で SEQUENCE を生成しようとしているのではないでしょうか? 詳しくはリンク先を参照してください。

参考URL:
http://www.postgresql.jp/document/pg802doc/html/sql-createsequence.html

その他の回答 (1)

  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.1

serial 型のカラムを除いて他のカラムを明示的に指定する必要があるかと。仮に、カラム名が順に t1,t2,r1,d1,d2,s だとしたら     use DBI qw(:sql_types); ... my $sth= $dbh->prepare("insert into $table (t1,t2,r1,d1,d2) values(?,?,?,?,?)"); my $n= 0; $sth->bind_param(++$n,$list[$count]->[0]); $sth->bind_param(++$n,$list[$count]->[1]); $sth->bind_param(++$n,$list[$count]->[2],SQL_REAL); $sth->bind_param(++$n,$today,SQL_DATETIME); $sth->bind_param(++$n,$today,SQL_DATETIME); eval { $sth->execute(); }; とか。bind_param() は、型明示をするために使いました。

関連するQ&A

専門家に質問してみよう