問題タブ [foreign-data-wrapper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - Postgre 以外のデータベースには、外国のデータ ラッパーに匹敵する機能がありますか?
外部データ ラッパーなど、最近追加されたいくつかの Postgres 機能に非常に興奮しています。私はこの機能を持つ他の RDBMS を認識していませんが、メインのクライアントに、現在の RDBMS のカクテルよりも Postgres を優先し始めるべきであると主張する前に、私の場合、他のデータベースではこれを行うことができないことを含めてください。 、それを確認したいと思います。
SQL/MED をサポートしている他のデータベースの証拠を見つけることができませんでした。また、Oracle が SQL/MED をサポートしていないことを示すこの短いメモのようなものも見つかりませんでした。
私に疑問を抱かせる主なものは、http://wiki.postgresql.org/wiki/SQL/MEDに関する声明です。
SQL/MED は Management of External Data であり、データベース管理システムがデータベースの外部に保存されたデータを統合する方法を扱う SQL 標準の一部です。
FDW が SQL/MED に基づいており、SQL/MED がオープン スタンダードである場合、他の RDBMS でもそれが実装されている可能性があります。
TL;DR:
Postgres 以外に SQL/MED をサポートするデータベースはありますか?
sql-server - postgres_fdw エラーでサーバーに接続できませんでした
この PostgreSQL コード行を書きましたが、次のエラーが発生しています。
エラー: サーバー "server\sqlexpress" に接続できませんでした
SQL 状態: 08001
私は何を間違っていますか?
私のコード:
Windows 8.1 で PostgreSQL 9.3 を使用し、同じウィンドウで MS SQL Express 2012 を使用する
postgresql - Postgres 9.3 外部テーブル | 外部ビューからすべての行が返されるわけではありません
2 つの PG データベースがあります。最初に私はビューを持っています.2番目のDBでは、外部データソースビューからすべてのエントリを読み取るv_articles
外部データテーブル(外部データラッパーを使用)を作成しました。これまでのところすべてうまくいきましたが、今日、ビュー v_articles のすべてのレコードがこの外部データ テーブル内にあるわけではないことに気付きました。この種の動作を引き起こす可能性のある提案はありますか。ほとんどの場合、これでうまくいきます。ここ数か月の間に、ビューから に「転送」されなかったレコードはごくわずかです。どこから始めればよいですか?ft_articles
v_articles
v_articles
ft_articles
postgresql - win64 用の odbc_fdw postgres エクステンションをコンパイルしようとしています
これをコンパイルしたい: https://github.com/bluthg/odbc_fdw for Windows. 手順を試して、あちこち検索しましたが、わかりません。
私が何をしても、私は得る:
PGSX を使用する場合
PGSX=1 を使用しない場合
コンパイラに何をすべきかを伝えるか、その情報を手動でフィードするためにPGSXが必要であることがわかりましたが、どちらもできないようです。
助けてくれてありがとう
postgresql - PostgreSQL での外部データ ラッパーの使用 (可変ファイル名)
PostgreSQL 9.3 を実行しており、毎日生成された csv ファイルを特定のテーブルにインポートしたいと考えています。私は FDW (Foreign Data Wrapper) を使い始め、特定の csv を指定しました。ここでクエリを実行し、テーブルに追加/アップサートできます。しかし、さらに 2 つのニーズがあります。この情報を取得して、テーブルにも挿入する必要があります。- 予想どおり、ファイル名は固定されていないため、FDW はどこから情報を取得すればよいかわかりません。
いくつかのUNIXツールを使用してこれを解決することを考えました(私のPostgresはWindowsで実行されますが)、基本的に(以前に作成されたインデックスから)リスト内の各ファイルに対して、スクリプトはファイルの名前を変更し、ブランチと日付をパラメーターとしてpsqlに渡します.exe コマンド ライン。インポートは FDW の固定名から行われます。
これは機能しますが、このスクリプトは少しハックのように聞こえ、あまり「エレガントな」ソリューションではありません。誰かがより良い提案をしていますか?
ありがとう!
postgresql - group-by で複数の自己結合を含むビューを高速化するには、postgres_fdw を使用します
(謝罪とハッカーの侵入に警告...)
バックグラウンド:
多くの SQL コードを書き直すことを避けたいレガシー アプリケーションがあります。私は、それが行う特定のタイプの非常にコストのかかるクエリを高速化しようとしています(つまり、ぶら下がっている果物)。
テーブルで表される金融取引台帳がありtransactions
ます。新しい行が挿入されると、トリガー関数 (ここには示されていません) によって、特定のエンティティの新しい残高が繰り越されます。
アプリケーションが関連するトランザクションをグループ化できるように、新しいトランザクションを「関連する」トランザクションでタグ付けすることにより、一部のタイプのトランザクション モデルの外部性 (インフライト ペイメントなど)。
私のテストデータセットには、次のものがあります。
- 合計約 550 万行
- 「関連する」トランザクションがない約 370 万行
- 「関連」トランザクションで約 180 万行
- およそ 55,000 の個別のエンティティ ID (顧客)。
したがって、すべてのトランザクション行の約 1/3 は、以前のトランザクションに「関連する」更新です。実稼働データは、約 25 倍大きく、transactionid
個別的には約 8 倍大きくentityid
、1/3 の比率がトランザクションの更新に適用されます。
コードは、次のように定義された特に非効率的な VIEW をクエリします。
典型的なクエリは次の形式を取ります。
ご覧のとおり、where entityid = 204425
句はサブクエリを制約するために使用されないGROUP BY
ため、すべてのエンティティのトランザクションがグループ化され、55,000 の大きなサブクエリの結果セットと馬鹿げたほど長いクエリ時間になります...すべて平均 40 行に到達します(この例では 71) 執筆時点。
transactions
何百ものコードベースの SQL クエリを書き直さない限り、テーブルをさらに正規化することはできません(たとえば、initial_transactions
とupdated_transactions
テーブルを で結合することによってrelated
)。その多くはさまざまな方法で自己結合セマンティクスを使用します。
洞察:
最初にWINDOW関数を使用してクエリを書き直そうとしましたが、それであらゆる種類の問題に遭遇しました(別のSOの質問は別の機会に)、www_fdwがそのWHERE句をGET / POSTパラメーターとしてHTTPに渡すのを見たとき、私は非常に興味をそそられました非常に素朴なクエリが再構築することなく最適化される可能性。
Postgresql 9.3 マニュアルには次のように書かれています。
F.31.4. リモート クエリの最適化
postgres_fdw は、リモート クエリを最適化して、外部サーバーから転送されるデータの量を削減しようとします。これは、クエリの WHERE 句を実行のためにリモート サーバーに送信し、現在のクエリに不要なテーブル列を取得しないことによって行われます。クエリの誤実行のリスクを軽減するために、組み込みのデータ型、演算子、および関数のみを使用する場合を除き、WHERE 句はリモート サーバーに送信されません。句の演算子と関数も IMMUTABLE でなければなりません。
実行のためにリモート サーバーに実際に送信されるクエリは、EXPLAIN VERBOSE を使用して調べることができます。
試み:
したがって、おそらく GROUP-BY をビューに入れ、そのビューを外部テーブルとして扱い、オプティマイザーが WHERE 句をその外部テーブルに渡すことで、はるかに効率的なクエリが得られるのではないかと考えました....
そしてそれは非常にうまく機能します!
問題:
ただし、それをビューに焼き付けようとすると(別のレイヤーの有無にかかわらずpostgres_fdw
)、クエリオプティマイザーはWHERE句を通過しないようです:-(
結果:
その動作を VIEW または FDW に組み込むことができれば、非常に少数のクエリで VIEWの名前を置き換えるだけで、より効率的にすることができます。他のユースケース (より複雑な WHERE 句) で非常に遅いかどうかは気にせず、使用目的を反映するように VIEW に名前を付けます。
のuse_remote_estimate
デフォルト値は ですFALSE
が、どちらの方法でも違いはありません。
質問:
この認められたハッキングを機能させるために使用できるトリックはありますか?