> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# スキーマ変更の反映サポート

> ソーステーブルで ClickPipes が検出できるスキーマ変更の種類を説明するページ

ClickPipes for Postgres は、ソーステーブルのスキーマ変更を検出し、場合によってはその変更を宛先テーブルへ自動的に反映できます。各 DDL 操作がどのように処理されるかを以下に示します。

[//]: # "TODO このページに、rename、データ型変更、truncate の動作と、互換性のないスキーマ変更への対処方法に関するガイダンスを追加する。"

| スキーマ変更の種類                                                     | 動作                                                                                                                                                                              |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 新しいカラムの追加 (`ALTER TABLE ADD COLUMN ...`)                      | テーブルで insert/update/delete が発生すると、自動的に反映されます。新しいカラムには、スキーマ変更後にレプリケートされたすべての行に対して値が設定されます                                                                                        |
| デフォルト値付きの新しいカラムの追加 (`ALTER TABLE ADD COLUMN ... DEFAULT ...`) | テーブルで insert/update/delete が発生すると、自動的に反映されます。[サポートされているデフォルト値](#default-values-for-added-columns)も ClickHouse のカラムに追加されるため、スキーマ変更後にレプリケートされた行だけでなく、すでに ClickHouse にある行にも適用されます。 |
| 既存カラムの削除 (`ALTER TABLE DROP COLUMN ...`)                      | 検出はされますが、**反映は** されません。削除されたカラムには、スキーマ変更後にレプリケートされたすべての行で `NULL` が設定されます                                                                                                        |

カラムの追加は、バッチ同期の最後に反映される点に注意してください。これは、同期間隔または pull batch size のしきい値に達した後に発生する可能性があります。同期の制御について詳しくは、[こちら](/ja/integrations/clickpipes/postgres/controlling-sync)を参照してください。

<div id="default-values-for-added-columns">
  ## 追加したカラムのデフォルト値
</div>

追加したカラムについて、ClickPipes は値を安全に ClickHouse に変換できる場合にのみデフォルト値を反映します。デフォルト値が反映されると、ClickHouse は新しいカラムが追加される前のデータパーツを読み取る際にその値を使用します。その結果、ClickHouse にすでに存在する行には、PostgreSQL で `ADD COLUMN` より前から存在する行に使用される値と同じ値が表示されます。テーブル全体の更新は必要ありません。

PostgreSQL では、ClickPipes はカラムの現在のデフォルト式ではなく、既存の行に対して PostgreSQL が保存した値を読み取ります。デフォルト値が式の場合、これは重要です。`now()` のような非揮発性の式はカラム追加時に PostgreSQL によって評価され、ClickPipes は式そのものではなく、その評価結果を反映します。後から実行する `SET DEFAULT` や `DROP DEFAULT` 操作は既存の行に使用されるデフォルト値を変更せず、ClickHouse にも反映されません。

次の値が反映されます。

* ブール値および有限の数値。
* `varchar`、`char`、enum、UUID、JSON/JSONB、`hstore`、ネットワークアドレス、Date を含むテキスト値。
* タイムスタンプ。タイムゾーン付きのタイムスタンプは UTC に正規化されます。

`NULL`、非有限の数値、`bytea`、配列、インターバル、時刻のみの値、ジオメトリ型など、ClickHouse に安全に移植できない表現のデフォルト値は省略されます。カラム自体は追加されますが、ClickHouse はカラム追加前のパーツに対して通常の型のデフォルト値を使用します。既存の行にソース側のデフォルト値を含める必要がある場合は、テーブル全体の更新が必要です。
