CData Sync で PostgreSQL の無限大(infinity)値を処理する方法
PostgreSQL は、高度なデータ型と標準規格への準拠で知られるオープンソースのリレーショナルデータベースシステムです。拡張性、パフォーマンス、信頼性に優れており、エンタープライズシステムで広く利用されています。
PostgreSQL は日付、時刻、数値データ型に対して、通常の範囲を超える値を表す特殊な infinity(正の無限大)および -infinity(負の無限大)値をサポートしています。これらの特殊な定数は、オープンエンドのタイムラインを定義する際に便利です。例えば、イベントやサブスクリプションに終了日がない場合などに使用されます。しかし、SQLite、MySQL、BI ツールなど、多くのデータベースやシステムはこれらの無限大値をネイティブでサポートしていないため、データ同期時にエラーやデータ損失が発生する可能性があります。これは、PostgreSQL から他のプラットフォームへデータをレプリケーションまたは移行する際に課題となります。
CData Sync は、設定オプションやカスタムクエリを使用して、これらの特殊な無限大値を標準的な有限値に変換できるため、この問題を解決します。これにより、システム間でスムーズなデータ統合が可能になります。
CData Sync を起動する
- ブラウザで CData Sync を開きます(デフォルト: http://localhost:8181)
- アカウントが既に存在する場合は、管理者の資格情報でサインインします
- アカウントがない場合は、「Sign Up」または「Create Admin Account」をクリックし、ユーザー名、パスワード、メールアドレスを入力して管理者プロファイルを登録します
登録が完了すると、Sync Web コンソールが自動的に開き、メインダッシュボードが表示されます。
ソースの設定 - PostgreSQL
方法 A: 無効な型を NULL に置き換える
- Connections を開き、Add Connection を選択して Source を選びます
- コネクタ一覧から PostgreSQL を選択します
- サーバー名または localhost、ポート番号 5432、Database name、Authscheme、User、Password などの接続情報を入力します
- Test Connection をクリックして接続を確認します
-
Advanced Settings を開き、Other を選択して、サポートされていない値(infinity など)を自動的に NULL に置き換えるプロパティを追加します
replaceInvalidTypesWithNull=true
- 設定を保存します


同期先の設定 - SQL Server
- Connections を開き、Add Connection を選択して Destination を選びます
- コネクタ一覧から SQL Server を選択します
- サーバー名または IP アドレス、ポート、Database name、User、Password などの接続情報を入力します
- Test Connection で接続を確認し、Save を選択します

新しいジョブを作成する
- Jobs を開き、Add Job を選択します
- ジョブ名を入力します(例: Postgres_to_SQLServer_InfinityHandling)
- Source に PostgreSQL を、Destination に SQL Server を設定します
- Save を選択してジョブを作成します

方法 A のタスクを追加する
- 作成したジョブを開き、Tasks タブに移動します
- Add Tasks を選択します
- 一覧から必要なテーブル(例: Account)を選択します
- replaceInvalidTypesWithNull=true プロパティが既に無限大値の変換を処理しているため、カスタムクエリオプションは有効にしません
- Add Tasks を選択して設定を保存します
- ジョブを実行すると、infinity および -infinity 値が同期先で NULL に置き換えられてデータがレプリケーションされます


方法 B のタスクを追加する
方法 B: カスタムクエリで CASE 式を使用して任意の値に変換して取り込む
接続プロパティ replaceInvalidTypesWithNull=true を設定する代わりに、CASE 式を使用したカスタムクエリで、データ同期時に infinity および -infinity 値を直接変換して取り込むことができます。
- 作成したジョブを開き、Tasks タブに移動します
- Add Tasks を選択します
- Custom Query オプションを有効にします
- 以下のクエリを入力して、infinity および -infinity 値を特定のタイムスタンプに変換します
- Add Tasks を選択して設定を保存します
- ジョブを実行すると、無限大値が同期先で定義されたタイムスタンプに変換されてデータがレプリケーションされます
REPLICATE [リンクテーブル名] ([created_at] TIMESTAMP)
SELECT
[~~その他のカラム~~],
CASE
WHEN [created_at] = 'infinity' THEN '2999-12-31 23:59:59'
WHEN [created_at] = '-infinity' THEN '1900-01-01 00:00:00'
ELSE [created_at]
END AS [created_at],
[~~その他のカラム~~]
FROM
[リンクスキーマ].[リンクテーブル名]


データ統合時に PostgreSQL の無限大値を処理することは、これらの特殊な定数をサポートしていないシステム間でデータの整合性を維持するために不可欠です。 CData Sync を使用すると、infinity および -infinity 値を NULL に置き換えたり、定義されたタイムスタンプに変換したりして、シームレスに管理できます。このアプローチにより、PostgreSQL と SQL Server などのターゲットデータベース間で正確かつエラーのないデータ同期が可能になり、信頼性が高くコンプライアンスに準拠したデータワークフローを実現できます。
今すぐ CData Sync を始めましょう!
30日間の無料トライアルで、数クリックでデータベース間の複雑なデータ同期を簡素化してみてください。サポートチームがすべてのステップでサポートし、統合がスムーズかつ安全に実行されるようお手伝いします。