2017-12-14 23 views
0

私は、700,000レコード近くのpostgresテーブルを持っています。私はそのテーブルを(ODBCデータソースを介して)MSアクセスにインポートし、最終的には250,000レコードで終了します。PostgresからMS Accessにテーブルをインポートしてレコードを失う

空のMSアクセスデータベース(520キロバイト)から始めます。 (外部データ)/(新しいデータソース)/(他のソースから)/(ODBCデータベース)/(ソースデータのインポート)/(マシンデータソース)私はODBC Postgresデータベースを選択し、 30秒間、すべてのオブジェクトが正常にインポートされたというメッセージボックスが表示された後、インポート手順を保存するかどうか尋ねられます。

エラーメッセージはありませんが、MSアクセスバージョンのテーブルの行数は約250,000です。

その他の情報...

  • 私は365バージョン1710
  • 私が使用しているpostgresの9.5.7
  • 私はPostgrSQL ANSI ODBCドライバを使用していますが、MSオフィスを使用しています(わかりませんバージョン)
  • エラーメッセージ(または警告)の兆候はありません。
  • インポート後、Accessデータベースはまだ375Mバイトしかなく、2Gバイトの限界をはるかに超えています。
  • 私は 'ODBCデータソース'アプリケーションをチェックして、postgres ODBCリンクがどのように設定されているかを確認しましたが、明白な問題はありません。
  • インポート後にMSアクセスが私に与える最後のメッセージには、「エラーなしでインポートされたすべてのオブジェクト」が含まれます。
  • 通過するレコードとそうでないレコードの間に明白な違いはありません。

なぜ私はレコードを失うのですか?それを治すために私は何ができますか?一度にデータベースからすべてのレコードを「読ま」しようとすると

おかげ

+0

[DBA Exchange](https://dba.stackexchange.com/help/on-topic)で質問する必要があります。 – F0XS

答えて

0

は、ODBCドライバは、いくつかの点でフェッチ停止し、ちょうどそれが警告なしに持っているものを返します。気に障る。私が知る限り、これは32ビットの制限とは関係ありません。

これを解決する方法は、すべてのレコードを一度にフェッチしないで、ドライバでdeclare/fetchオプションを使用することです。これは、ODBCの設定で "Datasource"を選択し、 "Use Declare/Fetch"をチェックし、キャッシュ(行数)のサイズを設定することで、ODBC設定で永久的に行うことができます。私は5,000から50,000の間の数を推薦します。各バッチはデータベースへのヒットを表します。したがって、最初はバッチを適度に大きくします。

declare/fetchの使用はすべて実際の用途では、アプリケーションにとって完全に透過的です。あなたは気づかないでしょう。あなたはデータベース管理者側で行いますが、フェッチサイズが十分大きければ問題にはなりません。

enter image description here

enter image description here

また、あなたの特定のクエリからの接続文字列に1回の編集を行うことができます。

UseDeclareFetch=1;Fetch=25000;