タイトル通りにorafceを組込みたいのですが、WebからDLしたDLLでは、動いてくれない(create extension orafce;
でエラー)ので自力でビルドし、実行確認までの備忘録になります。また、CMake も触ったことがないのでパスの指定が行えれば、問題ないと思ったのもあり、力業で作業を進めました。
準備するリソース
-
orafce 3.8 ここからDL
ビルドするソースになります。 -
Binaries from installer Version 10.10 (Win x86-64) ここからDL
orafceが使えることの確認のため、インストールせずに使える形式のものを使います。 -
icu4c-64_2-Win64-MSVC2017 ここからDL
orafceのビルドに使用します。 -
Visual Studio Community 2019
orafceをビルドするのに使用します。
orafceのビルド
Visual Studio 2019を起動し、プロジェクトやソリューションを開くから、「ORF_HOME\msvc\orafce.2010.sln」を開く。
ORF_HOME は、DLしたorafceを解凍したディレクトリになります。
以下、orafceのビルドで発生したエラーの内容と対応を記載します。
MSB8003 The VCToolsInstallDir property is not defined
ソリューション ⇒ プロパティ
構成 ⇒ 全般
プラットフォーム ツールセット
the build tools for windows7.1sdk
を
Visual Studio 2019 (v142)
に変更し、
ツール ⇒ ツールと機能を取得を選択
個別のコンポーネントタブを開く
MSVC v142 VS 2019 C++ X64/x86 ビルドツール(v14.22)にチェックマーク付けて追加インストールする。
ヘッダーファイルが見つからない
変数「PG_HOME」は、PostgreSQLのバイナリー版を解凍したディレクトリになります。
変数「ICU_HOME」は、ICUを解凍したディレクトリになります。
- postgres.h
ソリューションを右クリック ⇒ プロパティを選択
構成プロパティ ⇒ C/C++ ⇒ 全般の
追加のインクルードディレクトリで「PG_HOME\include\server」を設定する
- libintl.h
ソリューションを右クリック ⇒ プロパティを選択
構成プロパティ ⇒ C/C++ ⇒ 全般の
追加のインクルードディレクトリで「PG_HOME\include」を設定する
- netdb.h
ソリューションを右クリック ⇒ プロパティを選択
構成プロパティ ⇒ C/C++ ⇒ 全般の
追加のインクルードディレクトリで「PG_HOME\include\server\port\win32」を設定する
- dirent.h
ソリューションを右クリック ⇒ プロパティを選択
構成プロパティ ⇒ C/C++ ⇒ 全般の
追加のインクルードディレクトリで「PG_HOME\include\server\port\win32_msvc」を設定する
- unicode/ucol.h
ソリューションを右クリック ⇒ プロパティを選択
構成プロパティ ⇒ C/C++ ⇒ 全般の
追加のインクルードディレクトリで「ICU_HOME\include」を設定する
ライブラリが見つからない
- postgres.lib
ソリューションを右クリック ⇒ プロパティを選択
構成プロパティ ⇒ リンカー ⇒ 全般の
追加ライブラリのディレクトリで「PG_HOME\lib」を設定する
セットアップ
orafce のファイルを PostgreSQL の配下に配置する
- ORF_HOME\msvc\bin\x64\10.3\lib\orafce.dll
PG_HOME\lib\ にコピーします。
- ORF_HOME\orafce.control
PG_HOME\share\extension\ にコピーします。
- ORF_HOME\orafce--3.8.sql
PG_HOME\share\extension\ にコピーします。
PostgreSQL サーバの設定
コマンドプロンプトを開きパスを設定します。
set PG_HOME="postgresql-10.10-1-windows-x64-binariesを解凍したディレクトリ"
set PATH=%PG_HOME%\bin;%PATH%
データベースの初期化(データベースクラスタの作成)
>cd /d %PG_HOME%\bin
>initdb -D %PG_DATA%
PG_DATA は、データベースのデータを保存するディレクトリを指定します。
データベースサーバを起動
postgres -D %PG_DATA%
orafce を確認するDBを作成する
set PG_HOME="postgresql-10.10-1-windows-x64-binariesを解凍したディレクトリ"
set PATH=%PG_HOME%\bin;%PATH%
>cd /d %PG_HOME%\bin
bin>psql -h 127.0.0.1 -p 5432 -d postgres
postgres=# CREATE ROLE admin LOGIN PASSWORD 'admin';
CREATE ROLE
postgres=# CREATE DATABASE testdb OWNER admin;
CREATE DATABASE
adminユーザは必要ありませんでした。initdb で Windowsユーザのロールが作成されていた。(後で知りました)
確認
A5 で接続し、下記コマンドで確認します。
create extension orafce;
select next_day(current_date, 'saturday');