PolarDB for PostgreSQL (Compatible with Oracle) は、UNIX と Windows の両方のシステム向けに ODBC ドライバーを提供しています。このトピックでは、これらのドライバーを使用してクラスターに接続する方法について説明します。
前提条件
PolarDB クラスターにデータベースアカウントが作成されていること。詳細については、「データベースアカウントの作成」をご参照ください。
PolarDB クラスターへのアクセスに使用するホストの IP アドレスがホワイトリストに追加されていること。詳細については、「クラスターホワイトリストの設定」をご参照ください。
-
ご使用の Windows システムが、Service Pack 1 がインストールされた Windows 7 以降であること。
-
ご使用の UNIX または Linux システムに、以下のツールがインストールされていること:
-
Libtool 1.5.10 以降。
-
unixODBC-devel。
-
PolarDB-Tools。ダウンロードとインストールの手順については、「PolarDB-Tools」をご参照ください。
-
ドライバーのダウンロード
-
32 ビット x86 UNIX または Linux システム:PolarDB-ODBC_Linux_X86_32.tar.gz
-
64 ビット x86 UNIX または Linux システム:PolarDB-ODBC_Linux_X86_64.tar.gz
-
64 ビット Arm UNIX または Linux システム:PolarDB-ODBC_Linux_arm_64.tar.gz
-
64 ビット x86 Windows システム:PolarDB-ODBC_Windows_x86_64.7z
-
32 ビット x86 Windows システム:PolarDB-ODBC_Windows_x86_32.7z
Windows への ODBC のインストール
-
お使いの Windows のアーキテクチャに対応するインストールパッケージをダウンロードします。ダウンロードリンクについては、「ドライバーのダウンロード」をご参照ください。
-
ダウンロード完了後、ODBC パッケージを解凍します。
-
管理者として
install.batファイルを実行します。インストールが完了したら、任意のキーを押して終了します。 -
(オプション) ODBC パッケージをアンインストールするには、
uninstall.batファイルを実行してください。
Windows での PolarDB への接続
-
[コントロール パネル] で、管理ツール を開きます。
-
管理ツール ページで、[ODBC データ ソース] を見つけて開きます。
-
[ODBC データ ソース アドミニストレーター] ダイアログボックスで、追加する をクリックします。
-
[POLARDB (UNICODE)] を選択し、完了 をクリックします。
-
ダイアログボックスに、次の情報を入力します。
Parameter
説明
Data Source
データ ソースの名前。
Description
データ ソースの説明。
Database
接続先データベースの名前。
SSL Mode
SSL 暗号化方式を選択します。
Server
接続先データベースのエンドポイント。PolarDB クラスターのエンドポイントを表示するには、「エンドポイントの表示または申請」をご参照ください。
Port
接続先データベースのポート。デフォルト値は 1521 です。
Username
データベースアカウントのユーザー名。
Password
データベースアカウントのパスワード。
-
[保存] をクリックします。
UNIX または Linux への ODBC のインストール
-
次のコマンドを実行して、LD_LIBRARY_PATH 環境変数を設定します:
export LD_LIBRARY_PATH=<PolarDB-ODBC/lib/path> -
次のコマンドを実行して、ODBCINI 環境変数を設定します:
export ODBCINI=<your odbc.init file path> -
お使いのオペレーティングシステムのアーキテクチャとバージョンに対応する ODBC ドライバーをダウンロードします。ダウンロードリンクについては、「ドライバーのダウンロード」をご参照ください。
-
ODBC ドライバーをインストールします。
説明PolarDB ODBC ドライバーパッケージはポータブルです。解凍後すぐに使用できます。
tar -zxvf <ダウンロードしたドライバーパッケージ名>ディレクトリ構造は次のとおりです:
├── include ├── lib └── samples 3 directories
UNIX または Linux での PolarDB への接続
-
Linux サーバーに Libtool をインストールします。Libtool のバージョンは 1.5.10 以降である必要があります。
yum install -y libtool -
Linux サーバーに unixODBC-devel をインストールします。
yum install -y unixODBC-devel -
odbc.iniファイルを編集します。vim $ODBCINI -
odbc.iniファイルに次の情報を追加します。[POLARDB] Description = ODBC for POLARDB Driver = /home/user/target/lib/unix/polardb-odbc.so Driver64 = /home/user/target/lib/unix/polardb-odbc.so Database = <Your database name> Servername = <Your database endpoint> Password = <Your password> Port = <Your port> Username = <Your username> Trace = yes TraceFile = /tmp/odbc.log FileUsage = 1説明-
PolarDB クラスターのエンドポイントを表示するには、「エンドポイントの表示または申請」をご参照ください。
-
この例では、
/home/userをtargetフォルダーを含む実際のパスに置き換えてください。
-
-
PolarDB に接続します。
$isql -v POLARDB +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
UNIX または Linux の例
このセクションでは、Test1 および Test2 テストファイルの実行方法について説明します。
この例を実行する前に、PolarDB データベースに次のテーブルを作成し、データを入力してください:
create table emp(empno number(4),
ename varchar2(10),
job varchar2(9),
mgr number (4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2));
insert into emp values(7369,'smith','clerk',7902 ,to_date('17-12-1980','dd-mm-yyyy'),800,null, 20 );
insert into emp values(7499,'allen','salesman',7698 ,to_date('20-2-1981','dd-mm-yyyy'),1600, 300 , 30 );
insert into emp values(7521,'ward' ,'salesman' ,7698 ,to_date(' 22-2-1981' , 'dd-mm-yyyy' ), 1250 , 500 , 30 );
insert into emp values(7566,'jones','manager' , 7839 ,to_date(' 2-4-1981' , 'dd-mm-yyyy' ), 2975 , null , 20 );
insert into emp values(7654,'martin','salesman',7698 ,to_date(' 28-9-1981' , 'dd-mm-yyyy' ), 1250 , 1400 , 30 );
insert into emp values(7698,'blake','manager', 7839 ,to_date(' 1-5-1981' , 'dd-mm-yyyy' ), 2850 , null , 30 );
insert into emp values(7782,'clark','manager', 7839 ,to_date(' 9-6-1981' , 'dd-mm-yyyy' ), 2450 , null , 10 );
insert into emp values(7788,'scott','analyst', 7566 ,to_date(' 13-7-1987' , 'dd-mm-rr ' ) - 85 , 3000 , null , 20 );
insert into emp values(7839,'king', 'president ' , null ,to_date('17-11-1981 ' , 'dd-mm-yyyy' ), 5000 , null , 10 );
insert into emp values(7844,'turner','salesman ' , 7698 ,to_date('8-9-1981 ' , 'dd-mm-yyyy' ), 1500 , 0 , 30 );
insert into emp values(7876,'adams', 'clerk' , 7788 ,to_date('13-7-1987' , 'dd-mm-rr ' ) - 51 , 1100 , null , 20 );
insert into emp values(7900,'james', 'clerk' , 7698 ,to_date('3-12-1981' , 'dd-mm-yyyy' ), 950 , null , 30 );
insert into emp values(7902,'ford', 'analyst' , 7566 ,to_date('3-12-1981' , 'dd-mm-yyyy' ), 3000 , null , 20 );
insert into emp values(7934,'miller','clerk ' , 7782 ,to_date('23-1-1982' , 'dd-mm-yyyy' ), 1300 , null , 10 );
-
次のコマンドを実行して、ODBC ドライバーパッケージを解凍します。
tar -zxvf <ダウンロードしたドライバーパッケージ名> -
次のコマンドを実行して、
polardb-odbcフォルダーを開きます。cd polardb-odbc -
ODBC ドライバーフォルダー内の
samplesフォルダーを開きます。cd samples -
テストサンプルをコンパイルします。コンパイルが完了すると、
Test1とTest2という 2 つのテストファイルが生成されます。make -
Test1とTest2を実行します。./Test1 ## Test1 を実行 ./Test2 ## Test2 を実行説明-
Test1は、作成、読み取り、更新、削除 (CRUD) 操作の例です。Test2は、カーソルと出力パラメーターの使用方法の例です。 -
次のコードスニペットは、あくまで説明用です。完全なコードについては、ドライバーパッケージの
samplesフォルダーにあるTest1およびTest2ファイルをご参照ください。
-
次のコードは Test1 の例です:
...
int main(int argc, char* argv[])
{
/* 初期化 */
RETCODE rCode;
HENV *hEnv = (HENV*)malloc(sizeof(HENV));
HDBC *hDBC = (HDBC*)malloc(sizeof(HDBC));
HSTMT *hStmt = (HSTMT*)malloc(sizeof(HSTMT));
Connect("POLARDB","user","",&hEnv,&hDBC);
rCode = SQLAllocStmt(*hDBC,hStmt);
rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt);
/* CRUD 操作 */
ExecuteInsertStatement(&hStmt,(UCHAR*) "INSERT INTO EMP(EMPNO,ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP),'JACKSON')");
ExecuteUpdate(&hStmt,(UCHAR*) "UPDATE EMP SET ENAME='ODBC Test' WHERE EMPNO < 100");
ExecuteDeletStatement(&hStmt,(UCHAR*) "DELETE FROM EMP WHERE EMPNO<100");
ExecuteSimple_Select(&hStmt,(UCHAR*) "SELECT EMPNO,ENAME,JOB,MGR,HIREDATE FROM EMP where empno = 7369");
/* 接続を閉じる */
Disconnect(&hEnv,&hDBC,&hStmt);
/* クリーンアップ */
free(hEnv);
free(hDBC);
free(hStmt);
return 0;
}
次のコードは Test2 の例です:
int main(int argc, char* argv[])
{
/* 定義 */
RETCODE rCode;
SQLUSMALLINT a;
SQLINTEGER Num1IndOrLen;
SQLSMALLINT iTotCols = 0;
int j;
SDWORD cbData;
/* 初期化 */
HENV *hEnv = (HENV*)malloc(sizeof(HENV));
HDBC *hDBC = (HDBC*)malloc(sizeof(HDBC));
HSTMT *hStmt = (HSTMT*)malloc(sizeof(HSTMT));
HSTMT *hStmt1 = (HSTMT*)malloc(sizeof(HSTMT));
/* 接続の確立 */
Connect("POLARDB","user","***",&hEnv,&hDBC);
rCode = SQLAllocStmt(*hDBC,hStmt);
rCode = SQLAllocStmt(*hDBC,hStmt1);
rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt);
rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt1);
/* 開始 */
ExecuteSimple_Select(&hStmt1,(UCHAR*) "BEGIN;");
/* 準備 */
RETCODE rc = SQLPrepare((*hStmt),(SQLCHAR*)"{ call refcur_inout_callee2(?,?)}",SQL_NTS);
rc = SQLBindParameter((*hStmt),1, SQL_PARAM_INPUT_OUTPUT, SQL_C_CHAR,SQL_REFCURSOR,0, 31,
strName, 31, &Num1IndOrLen);
rc = SQLBindParameter((*hStmt),2, SQL_PARAM_INPUT_OUTPUT, SQL_C_CHAR,SQL_REFCURSOR,0, 31,
&strName1, 31, &Num1IndOrLen);
Num1IndOrLen=0;
/* 実行 */
rc = SQLExecute((*hStmt));
if(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
{
printf("\nstrName _________ = %s\n",strName);
printf("\nstrName 1_________ = %s\n",strName1);
}
printf("\n First Cursor as OUT Parameter \n") ;