PGconn#quote_ident

Rails 2.3.4 で PostgrSQLデータベース使おうとしてなんかエラー。
「NoMethodError: undefined method `quote_ident' for PGconn:Class」
Rails2.3.2→2.3.3で「undefined method `quote_ident'」エラー - TrinityT’s LABO とか見るにポスグレのドライバが対応していないという事か。エラーの出たマシンの環境は、ポスグレ使うの gem系じゃなくて aptitudeパッケージ libdbi-ruby, libpgsql-ruby, libdbd-pg-ruby この辺でやってたような。
ちなみに「sudo gem install postgres」には失敗、ポスグレ系の PostgreSQL build environment (libraries & headers)とか入ってないからとのこと。

上記 TrinityT’s LABOさんにあったパッチを試す、何とかなったっぽい。

nfig/initializers/new_rails_defaults.rb 冒頭

class PGconn
  def self.quote_ident(name)
    '"' + name + '"'
  end # def self.quote_ident(name)
end # class PGconn

所で、「%("#{name}")」「%Q["#{name}"]」「'"' + name + '"'」とかどうでしょう。僕は第二者が慣れてるかな、Q無しに慣れてるならそれも見易いか、結局「"」とか変数展開とかどうなってるのか心配だと三番目の記法もわかり易いかも。

すぐに追記

  • 「script/server」での稼働(development環境)可
  • rake db:drop 不可、quote_ident が無いよエラー
  • rake db:create 不可、メッセージちょっと流れるけど結局は quote_ident が無いよエラー

手で development を直接作った上で

  • rake db:migrate 可
  • rake spec 可
  • rake features 可
    • そしてその後で見ると test用DB出来てる

という事で、万全ではないがなんとか開発出来るかなという状況

更に追記

もうちょっと前の方で定義してみる

[6705] rake -E 'class PGconn; def self.quote_ident(n); %Q["#{n}"]; end; end' db:drop                         
(in /home/<どこか>)
Couldn't drop <なんか>_development : #

駄目でした。

ちょっとファイルに書いて require してみる

[6711] rake -r pgconn_quote_ident db:drop
[6712] rake -r pgconn_quote_ident db:create
[6713] cat pgconn_quote_ident.rb                   19:35 0915 火
class PGconn
  def self.quote_ident(name)
    '"' + name + '"'
  end # def self.quote_ident(name)
end # class PGconn

こんどは何とかなった。別途DBリストしてやるとたしかに dropとか create出来てる。

うーむ。なんかもうちょっと見通しの良い案はないかな。