0

私は開発中にRails3.2.3、Sphinx 2.0.1ベータ、Postgresql 9.1.3を使用しており、このインデックスは次のとおりです。

define_index do
  indexes :name
  indexes :city

  has :id
  has :gender_cd, as :gender, type: :integer
  has "extract(year from age(birthdate))", as: :age, type: :integer
  set_property delta: true
end

開発や動作、検索などで適切にインデックスを作成します。ただし、本番サーバーにデプロイすると、インデクサーから次の情報が得られます。

(DSN=blah blah blah).
total 0 docs, 0 bytes
total 0.023 sec, 0 bytes/sec, 0.00 docs/sec
indexing index 'user_delta'...
ERROR: index 'user_delta': sql_range_query: ERROR:  column "users.birthdate" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ... "users"."gender_cd" AS "gender", extract(year from age(birthdate)...

問題は8.4pgsqlにあると思いましたが、9.1.4でも問題は残ります。sphinxバージョンは、dev2.0.4-releaseよりも新しいバージョンです。

GROUP BYを含めることでこの問題が発生することは知っていますが、これはPostgresを使用する場合に固有ですが、開発環境で機能するのはなぜですか?

4

1 に答える 1

2

GROUP BY9.1 より前のバージョンの PostgreSQL では、集計関数によって生成されない結果のすべての列が必要です。バージョン 9.1 以降では、句に含まれる列に機能的に依存する列を省略できます。GROUP BYそのため、9.1 でも問題が解決しない場合は、主キーの定義が欠落している可能性があります。

http://www.postgresql.org/docs/9.1/interactive/sql-select.html#SQL-GROUPBY

于 2012-06-24T14:44:41.483 に答える