web-dev-qa-db-ja.com

コンピュータの日付/時刻を変更すると、postgresqlのuuid_generate_v1()が競合する可能性がありますか?

Postgresql uuid-osspドキュメントによると、uuid_generate_v1()はMacアドレス+タイムスタンプに基づいています:

https://www.postgresql.org/docs/9.4/static/uuid-ossp.html

数百のデータベースがUUIDキーを使用してレコードを生成し、中央データベースに同期する分散データベースシナリオ。

将来、マシンの日付/時刻が間違っていることを検出し、それを正しい日付/時刻に戻したとします。この特定のマシンで競合するUUIDキーを生成することはありますか?

1つのシナリオは、夏時間/夏時間です。

4
Thiago Sayão

uuid_generate_v1()よりもuuid_generate_v4()を使用することがわかっている理由はありません。そうは言っても、フィロは彼が言ったときに大体正しいです

「1つのシナリオは、夏時間/夏時間です。」 - いいえそうではありません。すべてをUTCとして保存する必要があります。時間は常に前進します。 –フィロ

表示時間がDST(またはCSTCDTなど)に設定されている場合でも、基になるストレージメカニズムはUTCである必要があります。

つまり、すべてをUTCとして保存する必要がありますが、常にそうであるとは限りません。例外があります XPやWindows 7の場合と同様 。特に、他のOSによるRTCの変更を許可する場合は、何らかの異常が発生する可能性があります。

また、カーネルまたはデーモンが秒をロールバックし、これをサポートしているかどうかを確認するのは基本的に彼ら次第です。本当にひとめぼりしたい場合は、うるう秒の問題が常にあります。 Linux-properとOSXは、Androidはafaikしません うるう秒のユーモラスなNDT

参考までに、仕様ではUUID v1時間ベースのUUID 4.2時間ベースのUUIDを作成するためのアルゴリズム の生成プロセスについて詳しく説明しています。

2
Evan Carroll