通常のWindows向けインストーラを使った場合は、たぶん起きないはず。最初にVisual C++ランタイムがインストールされるので。でも、インストーラを使わずポータブルな実行環境を構築する過程や、何かのはずみでランタイムを削除した時などは ↓ のようなエラーが珍しくない。現時点の自分の備忘録として対策をまとめておきます。動作確認はWindows 7 64bit英語版で行いました(PostgreSQL32bit版も含む)。
*追記 2016.7.2 VC のバージョンを VS のに誤記していたのを訂正しました m(_)m
Contents


ファイル名が微妙に違うエラーについて

msvcrでなくmsvcp120.dllが見つからない場合も、原因は同じでVisual C++ 12(Visual Studio 2013付属)のランタイムがないから。また少し前までのPostgreSQLは、使っているランタイムのバージョンが古いのでファイル名の120が違う数字になっているはずです。とりあえず今回はPostgreSQL 9.49.5が使うVC12のランタイムを例にしました。


方法1Microsoftのランタイムインストーラを使う

ポータブルな実行環境でなくなりますが、たぶん最も一般的な方法。↓ から32bit版(vcredist_x86.exe)または64bit版(vcredist_x64.exe)をダウンロードして実行するだけ。Windowsのシステムフォルダのどっかにランタイムがインストールされ、PostgreSQLはもとより他のアプリでも使えるようになります。なおWindows 10はランタイムのサポートOSに挙げられてなく、もしかして別のファイルが必要かも。


方法2PostgreSQL Portable同梱のDLLを使う

9.4より前を含め各バージョンが ↓ に揃っているので、これを解凍してDLLだけ使う方法。ただしZIP版にはランタイムがなく、実行ファイル(EXE)を使います。EXEは一見インストーラ風ですが実質行うのはファイルの展開だけで、結果できるファイル群の中にランタイムがあり。

↑ バージョン9.4.1.の例。展開先/App/PgSQL/binフォルダにランタイムmsvcr120.dllが入っています。これを自分のPostgreSQLbinフォルダにコピーすればOK。

ただしmsvcpはなく、他のバージョンも同様。サーバやpsqlを使う分には支障ないので省いたのかな。あと、この9.4.1では32bit版しかありません。他のバージョン、例えば9.3.5では64bit版が入ってました。という感じで、正直よく分からない点もあります。

方法3DLL同梱のポータブルアプリ、例えばMySQLを使う

PostgreSQL Portableは、実質解凍しか行わないとは言えEXEを実行する必要がありました。一方、他のポータブルアプリでZIP等にランタイムが同梱されているものなら、それを使うのが手っ取り早い。ちょうど最近試したMySQL Community Server 5.7.9ZIP版に入っていました。ファイルサイズが300MB以上あるけど…。ダウンロードは下記から。その下の画像が、解凍後のbinフォルダ内にランタイムを見つけたところ。これをPostgreSQLbinフォルダにコピーすればOK。

方法4DLLだけウェブ上で探す

個人的には前項のMySQLから持ってくるのがおすすめ。ダウンロードに時間かかるけどMySQLも知る良い機会になるので。どうしても急ぎで、PostgreSQL Portable64bit版がない等の理由で使えなかった場合、例えば下記から間に合わせられるかも。あくまで今日はダウンロードできたというだけですが。この手のサイト特有の「引っかけ」的なリンクが多いので(まぁSourceForgeも同様か…)利用する際は注意して下さい。