sql >> データベース >  >> RDS >> PostgreSQL

地理的に分散したサーバー、PostgreSQL、およびJPA

    解決策は、これらの瞬間にTIMESTAMPTZフィールドを使用することです。 「ユーザーが作成されたのはいつか」のようなものは、デフォルトではTZ情報を保持しないため、TIMESTAMPフィールドとともに保存しないでください。 JDBCドライバーは、これらを非常に任意に処理します。たとえば、次のことを考慮してください。

    データベースサーバーがUTCである間、JVMがAmerica/Los_Angelesゾーンにあると想定します。

    次に、次のテーブルを作成します。

     CREATE TABLE test (
       id   INTEGER,
       ts   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
       tswz TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
     );
    

    PSQLから発行する場合:

     INSERT INTO test(id) values(1);
    

    「ts」と「tswz」の値は同じになります。両方とも現在のUTC時間になります。ただし、JDBCドライバーを使用してJavaから同じ正確なクエリを実行する場合、「ts」はロサンゼルスの現在の時刻になり、「tswz」はUTCの時刻になります。

    この場合、サーバーのフィールドがデフォルトになっているため、ドライバーがサーバーにJVMタイムゾーンをどのように伝達するかはわかりません。彼らは、セッションのタイムゾーンを設定しないと言いますが、設定する必要があります。いずれにせよ、TIMESTAMPTZフィールドを使用すると、どのタイムゾーンにあるかに関係なく、どのJVMからも同じインスタントを取得できます。




    1. Oracle CONNECT BY再帰的な子から親へのクエリ、自己参照する最終的な親を含める

    2. codeigniternodejsとnowjsの統合

    3. レール上にRubyをセットアップする際の許可なし

    4. MySQL複数の列の値を条件付きで合計