1
1

More than 5 years have passed since last update.

Windows 10 + PostgreSQL 10.10 に orafce を組込む

Posted at

 タイトル通りにorafceを組込みたいのですが、WebからDLしたDLLでは、動いてくれない(create extension orafce;でエラー)ので自力でビルドし、実行確認までの備忘録になります。また、CMake も触ったことがないのでパスの指定が行えれば、問題ないと思ったのもあり、力業で作業を進めました。

準備するリソース

  1. orafce 3.8 ここからDL
    ビルドするソースになります。

  2. Binaries from installer Version 10.10 (Win x86-64) ここからDL
    orafceが使えることの確認のため、インストールせずに使える形式のものを使います。

  3. icu4c-64_2-Win64-MSVC2017 ここからDL
    orafceのビルドに使用します。

  4. 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');
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1