メインコンテンツまでスキップ
メインコンテンツまでスキップ

postgresql テーブル関数

リモートのPostgreSQLサーバーに保存されているデータに対して SELECT および INSERT クエリを実行することを可能にします。

構文

パラメータ

  • host:port — PostgreSQLサーバーのアドレス。
  • database — リモートデータベース名。
  • table — リモートテーブル名。
  • user — PostgreSQLユーザー。
  • password — ユーザーパスワード。
  • schema — 非デフォルトのテーブルスキーマ。オプション。
  • on_conflict — 衝突解決戦略。例: ON CONFLICT DO NOTHING。オプション。

引数は名前付きコレクションを使用して渡すこともできます。この場合、hostport は別々に指定する必要があります。このアプローチは本番環境で推奨されます。

返される値

元のPostgreSQLテーブルと同じカラムを持つテーブルオブジェクト。

注記

INSERT クエリでは、テーブル関数 postgresql(...) をカラム名リストを持つテーブル名から区別するために、キーワード FUNCTION または TABLE FUNCTION を使用する必要があります。以下の例を参照してください。

実装の詳細

PostgreSQL側の SELECT クエリは COPY (SELECT ...) TO STDOUT として、リードオンリーのPostgreSQLトランザクション内で各 SELECT クエリの後にコミットされます。

単純な WHERE 句(=, !=, >, >=, <, <=, および IN など)はPostgreSQLサーバー上で実行されます。

すべての結合、集約、ソート、IN [ array ] 条件および LIMIT サンプリング制約は、PostgreSQLへのクエリが終了した後にClickHouse内でのみ実行されます。

PostgreSQL側の INSERT クエリは COPY "table_name" (field1, field2, ... fieldN) FROM STDIN として、各 INSERT 文の後に自動コミットされるPostgreSQLトランザクション内で実行されます。

PostgreSQLの配列型はClickHouseの配列に変換されます。

注記

注意が必要です。PostgreSQLでは、Integer[] のような配列データ型のカラムは異なる行に異なる次元の配列を含む場合がありますが、ClickHouseではすべての行で同じ次元の多次元配列を持つことのみが許可されます。

複数のレプリカのサポートがあり、| でリストする必要があります。例えば:

または

PostgreSQL辞書ソースのためのレプリカの優先順位もサポートしています。マップ内の数が大きいほど優先順位は低くなります。最高の優先順位は 0 です。

PostgreSQLにおけるテーブル:

プレーン引数を使用してClickHouseからデータを選択:

または 名前付きコレクション を使用して:

挿入:

非デフォルトスキーマを使用:

関連情報

PeerDBを使用したPostgresデータのレプリケーションまたは移行

テーブル関数に加えて、PostgresからClickHouseへの継続的なデータパイプラインを設定するために、ClickHouseによるPeerDBを使用することができます。PeerDBは、変更データキャプチャ(CDC)を使用してPostgresからClickHouseへデータをレプリケートするために特別に設計されたツールです。