大きな.bak
SQL Server 2005ダンプのファイル。
SQL Serverを使用せずに、PostgreSQL、MySQL、またはフラットテキストファイルにこれらを復元できますか?
オープンソースのソリューションが最も有用でしょう。
これが私が提案するものです:
VMにバックアップを保持するのに十分なスペースがあり、それを復元するのに十分なスペースがない場合、 Redの製品の試用版)を使用して「仮想復元」を実行できます。同じ名前のゲート (バックアップファイルが復元されたかのように操作できます。それ以外の場合は データベースを通常の方法で復元します 。
(通常の復元または仮想復元のいずれかによって)データベースが使用可能になると、次の方法でスキーマとデータのスクリプトを生成できます。
または、データをCSVファイルなどに抽出するために bcpユーティリティ を試してみることができますが、これをテーブルごとに行うか、巧妙なスクリプト(PowerShell、T-SQL)を使用する必要があります。 、C#/ SMOなど)を使用して、すべてのbcpコマンドを生成します。 CSVファイルに入れたら、データをPostgresに一括でロードするのは簡単です(ただし、テーブルを生成するための作業がまだあります)。
最後の提案として、.bakファイルが膨大なものではなく、データが機密情報でない場合は、必要な形式でファイルを生成することを心がけています。スペースのあるWindows VMがたくさんあるので、.BAKファイルを取得できる場所に移動するのは難しいでしょう。特に、ファイル共有サービスがサポートするほとんどのサイズよりも大きい場合はそうです。
残念ながら、ファイル自体の内部について深い知識がなければ、.bakファイルの内容にアクセスする方法はありません。この情報を知っているかもしれない人がここにいると思いますが、その人がどうやってそれを行うかを教えてくれるかどうかは言えません
したがって、SQL Serverインスタンスをインストールする必要があります。また、このインスタンスがPostgresサーバーと通信できることを確認する必要もあります(pg_hba.confでフリッグ)。そこに到達すると、データを移行するための適切なパスがいくつかあります。
最初のパスは、Postgres Windows ODBCドライバーをインストールし、pgサーバーへの接続をセットアップすることです。その後、SSISを使用してデータ移行をスクリプト化できます。これを実行する場合ルート、データベースサーバーをインストールするときにSSISをインストールすることをお勧めします。
他のオプションには、ODBCドライバー接続も含まれますが、SQL Serverでリンクサーバーを作成し、SQL Serverを介してpgインスタンスで挿入を実行できます。ここでこの質問に正確に回答しましたので、それを見つけるのは難しいことではありません。
編集
アーロンのコメントを組み込むために、SQL Serverを起動して実行したら、さまざまな方法でデータをフラットファイルにエクスポートすることもできます。このパスを選択した場合はお知らせください。いくつかの方法で投稿します
編集(2):
事前に構造を作成する必要がない限り、リンクサーバープロセスは最適なアプローチではない場合があります。それが私の好みの方法ですが、私は通常、すでに両側に構造を配置しています。
これにより、Aaron Bertrandの回答が最良の回答になります。データタイプ(IDENTITY
とSEQUENCE
の比較)に加えて、postgresはデータベース自体にエンコードを設定しているため、NVARCHAR
を認識しません。 PostgresはCREATE CLUSTERED INDEX
を何も知りません( CLUSTER
はあなたのために働くかもしれません)。最後に、コメントで空間データを使用することになるので、postgresqlはCREATE SPATIAL INDEX
構文を認識しません。空間インデックスを作成するには、postgisをインストールし、INDEXTYPE
キーワードを使用する必要があります。最後に、スキーマを適切に処理するようにしてください。
短い話: