Drupal on PostgreSQL の multiping

昔から PostgreSQL を使っていたので、 ここで動いている Drupal も PostgreSQL を使っています。
インストールは ports tree から入るので Drupal 自体は問題ないのですが、 module が歴史的な理由から MySQL でしか動かない物も多いようです。

multiping もその一つで、 こちらの CHOLESTEROL さんがパッチを充てているのを参考にさせていただいたのですが、 気づいたらなんかうまく動かなくなっていました。

見ると SQL 文でエラーが出ていて、 テーブル名のプリフィックスが二重に付いています……。 うむむ、なんだこれ。

最初プリフィックスを付ける部分だと思って db_prefix_tables() を見てましたが、 考えてみればここだと他のモジュールでも不具合が出るだろうと思ったのでもう少し調べてみました。

ふと見るとプリフィックス付きのテーブル名に置き換わる中かっこが付いている外側にも中かっこが。
{{node} n} みたいにして問い合わせてます。あれれー。

そんなわけで multiping.module を以下のように修正してみたらあっさり解決しました。
うーん、でもこれだと MySQL でも起きそうな気がするんですが、微妙に違うのかなぁ。

- $res_time = db_query('SELECT max(created) FROM {'.$sql_from.'} WHERE '.$sql_where);
+ $res_time = db_query('SELECT max(created) FROM '.$sql_from.' WHERE '.$sql_where);
- $res_time = db_query('SELECT max(changed) FROM {'.$sql_from.'} WHERE '.$sql_where);
+ $res_time = db_query('SELECT max(changed) FROM '.$sql_from.' WHERE '.$sql_where);

トラックバック


URL から "-n0spam" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。

はじめまして!

はじめまして!
ちょうど、同じようなエラーが出て困っていたところ、
わかりやすい記事があって助かりました!!
ありがとうございます。

コメントありがとうございます

お役に立てたようで良かったです。
わたくしも手探り状態でしてホントにこれでいいのか不安ではありますが(笑)


Yokky's flickr photo
DMM.com 映画・ドラマ、アニメのダウンロード販売