2

personPostgresSQL データベースに、さまざまなユーザーのデータを含むテーブルがあります。

テスト ケースを作成する必要があります。これにより、一部のルーチンがユーザー 1 のデータを変更し、ユーザー 2 のデータを変更しないことが保証されます。

この目的のために、私はする必要があります

a) ユーザー 1 のすべての行とユーザー 2 の行のハッシュ コードを計算します。

b) 次に、テスト中の操作を実行します。

c) ハッシュコードを再度計算し、

d) ステップ a) と c) のハッシュ コードを比較します。

単一行のハッシュ コードを計算する方法を見つけました。

SELECT md5(CAST((f.*)AS text))
FROM person f;

私の目標 (ユーザー 2 の行が変更されたかどうかを確認する) を達成するには、次のようなクエリを実行する必要があります。

SELECT user_id, SOME_AGGREGATE_FUNCTION(md5(CAST((f.*)AS text)))
FROM person f
GROUP BY user_id;

行セットのハッシュ コードを計算するには、どの集計関数を使用できますか?

注: ユーザー 2 の行が変更されたかどうかを知りたいだけです。正確に何が変わったのか知りたくありません。

4

2 に答える 2

4

md5最も簡単な方法-すべての文字列形式を。で連結するだけstring_aggです。ただし、この集計を正しく使用するには、を指定する必要がありますORDER BY

またはmd5(string_agg(md5(CAST((f.*)AS text)),''))、いくつかで使用しますORDER BY-変更のフィールドがある場合はf.*変更され、比較するのは安価です。

于 2012-11-25T19:22:28.957 に答える
1

それを行うさらに簡単な方法

SELECT user_id, md5(textin(record_out(A))) AS hash
FROM person A
于 2016-02-20T07:16:44.310 に答える