2012-03-01 21 views
3

PostgreSQLデータベースに、TIMESTAMP WITHOUT TIME ZONEタイプのテーブルがあります。私はこのコラムでレコードを注文する必要があると明らかにPostgreSQLは、としてそれをやっていくつかの問題があり、両方のPostgreSQLがタイムスタンプ列を正しく注文していません

...ORDER BY time_column 

...ORDER BY time_column DESC 

くれ持つレコードの私の3要素のサンプルのための要素の順序と同じ順序を与えます同一の time_column値ですが、ミリ秒単位の値は除きます。

ソート中は、値のミリ秒は考慮されていないようです。

実際にデータベースに格納されているのは確かです。レコードを取得すると、DateTimeフィールドに表示されるためです。

最初にすべてのレコードをロードしてから、メモリにtime_columnで注文すると、結果は正しいです。

注文が正しく動作するようにいくつかのオプションがありませんか?

EDIT:明らかに欠けていました。この問題はPostgreSQLではなく、NHibernateがDateTimeプロパティからミリ秒をはずしています。

+1

実際の使用例を教えてください。 –

+1

私は、PostgreSQLが10年以上そこにあった組み込み型をソートすることができないと考えるのは難しいと認めます。 –

+0

ソートに失敗した3要素サンプルのテーブル定義と挿入コマンドを入力してください。私はリチャードと同意します。私はデータベースにタイムゾーンなしのタイムスタンプを使用しているので、並べ替えに問題はありません。 – Matt

答えて

3

PostgreSQLがタイムスタンプを正しくソートできないという馬鹿げた考えです。 クイックテストを実行し、確認してください:

CREATE TEMP TABLE t (x timestamp without time zone); 

INSERT INTO t VALUES 
('2012-03-01 23:34:19.879707') 
,('2012-03-01 23:34:19.01386') 
,('2012-03-01 23:34:19.738593'); 

SELECT x FROM t ORDER by x DESC; 
SELECT x FROM t ORDER by x; 

q.e.d.

次に、実際に何が起きているのかを調べてみてください。あなたができない場合は、テストケースを投稿すれば、前任者に前もって助けられるでしょう。