<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>psqlODBC &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/psqlodbc/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<description>OSS専門の技術ブログ。PostgreSQL、Zabbixを中心に10種類以上のOSSの解説、アップデート情報、運用ヒントを提供。</description>
	<lastBuildDate>Wed, 04 Nov 2026 06:30:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2018/07/blog-icon-150x150.png</url>
	<title>psqlODBC &#8211; SRA OSS Tech Blog</title>
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>psqlODBC (PostgreSQLむけODBCドライバ)</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/psqlodbc/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Tue, 28 Mar 2017 18:29:40 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[psqlODBC]]></category>
		<category><![CDATA[サードパーティーソフトウェア]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=3166</guid>

					<description><![CDATA[1. psqlODBC とは psqlODBCはオープンソースソフトウェアとして開発されている PostgreSQL の ODBC ドライバです。完全ではありませんが ODBC 3.0 に対応しています。ほかに商用製品の ...]]></description>
										<content:encoded><![CDATA[<h3>1. psqlODBC とは</h3>
<p><a href="https://odbc.postgresql.org/">psqlODBC</a>はオープンソースソフトウェアとして開発されている PostgreSQL の ODBC ドライバです。完全ではありませんが ODBC 3.0 に対応しています。ほかに商用製品のドライバも存在しますが、大部分の用途では psqlODBC を使用すれば十分といえます。psqlODBC の難点としては、公式ドキュメントの記述量が少ないこと、利用方法を解説した文書が少ない、あるいは、ひどく古いバージョンを前提とした公開文書が多く、取捨選択が難しいことがあります。</p>
<p>本文書は、PostgreSQL 18.3 と psqlODBC 18_00_0001 を使って、psqlODBC の Windows 上と Linux 上での使い方を解説します。</p>
<p><span id="more-3166"></span></p>
<h3 style="margin-top: 40px;">2. 導入方法 （Windows）</h3>
<h4>◆ パッケージの取得</h4>
<p>psqlODBC ソフトウェアは以下ページから入手できます。セットアッププログラム(*-setup.exe)、MSI インストーラ（.msi）、マージモジュール（.msm）の各形式から選べます。さらにメモリ管理にmimallocライブラリを使った版も用意されています。</p>
<p><a href="https://www.postgresql.org/ftp/odbc/releases/" target="_blank" rel="noopener noreferrer">https://www.postgresql.org/ftp/odbc/releases/</a></p>
<p>ソースコードは <a href="https://github.com/postgresql-interfaces/psqlodbc">psqlodbc の githubページ</a> から取得できます。</p>
<h4>◆ 32bit 版と 64bit 版</h4>
<p>バイナリ配布については同バージョンでも 64bit （ファイル名に「-x64」が含まれます） と 32bit （ファイル名に「-x86」が含まれます／古いものは何もサフィックスがなければ 32bitです）の 2 種類があります。Windows が 32bit か 64bit かによって使い分けます。</p>
<p>64bit の Windows でも 32bit ビルドされたアプリケーションで ODBC を使うために 32bit 版を使用したい場合があります。この場合、設定画面（ODBCデータソースアドミニストレーター）としては「コントロールパネル」→「Windowsツール」から「ODBCデータソース(32ビット)」を選びます。対応するアイコンが無い場合には、Windows システムディレクトリ内にある 32bit 版の odbcad32.exe を直接実行してください。</p>
<h4>◆ ANSI 版と UNICODE 版</h4>
<p>psqlODBC には ANSI 版と UNICODE 版の二つのドライバが含まれています。ODBC ドライバを使用する Windows アプリケーションのビルドオプションと合わせます。ANSI 版は Visual Studio における「マルチバイト文字セットを使用する」ビルドに対応します。</p>
<p>psqlODBC ドライバは UNICODE 版では PostgreSQL サーバとの間を UTF8 クライアント文字エンコーディングで通信します。データベース文字エンコーディングが UTF8 以外（EUC_JP など）である場合、アプリケーションから SQL として送られてくる文字列をデータベース文字エンコーディングに変換するのに失敗する可能性があります。最終的に格納可能な文字のみをデータとして投入するようにアプリケーション設計しておく必要があります。</p>
<p>ANSI 版の場合には、クライアント側 Windows のコードページを調べて、それに合わせて PostgreSQL のクライアント文字エンコーディングを宣言します。コードページが 932 なら SJIS になるはずです。どのクライアントエンコーディングであると宣言するかはデータソースの構成で上書き設定可能です。</p>
<h3 style="margin-top: 40px;">3. 設定方法 （Windows）</h3>
<h4>◆ データソース作成</h4>
<p>ODBC接続を利用するには、Windows にデータソース定義を作る方法と、全ての接続情報を直接指定する方法があります。データソース定義を作るには、「コントロールパネル」→「Windowsツール」から「ODBCデータソース」から設定画面（ODBC データ ソース アドミニストレーター）を起動します。</p>
<p>「追加」ボタンを押して、PostgreSQL UNICODE または PostgreSQL ANSI のドライバを選択すると下記の ODBC セットアップ画面になります。ここで、サーバホスト名(Server)、ポート番号(Port)、データベース名(Database)を指定します。ユーザ名(Uid)、パスワード(Pwd) をここで指定することは必須ではありません。カッコ内で示したものは対応するパラメータ名です。</p>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/psqlODBC_1-1.png" alt="図 1： ODBC セットアップ画面" width="600" /></p>
<p style="margin-top: 0px;">図 1： ODBC セットアップ画面</p>
</div>
<p>「オプション（高度な設定）」の「データソース」から各種の設定ができます。次項にて詳細を説明します。</p>
<p>「オプション（高度な設定）」の「全体設定」からは接続前に採取するログの種類とログ出力先ディレクトリ（パラメータ名としてはLogdir）が設定できます。「管理」からはANSI版ドライバ・UNICODE 版ドライバの切替ができます。<br />
「SSL Mode」では SSL 接続について無効、考慮、優先、必須、必須:証明書認証、必須:証明書完全認証を指定できます。INI ファイルでのパラメータ名は SSLmode 、短縮名は CA です。選択肢の意味はそれぞれ libpq 接続ライブラリにおける sslmode オプションの disable 、 allow 、 prefer 、 require 、 verify-ca 、 verify-full に相当します（INI ファイルではこれら文字列で指定します）。</p>
<h4>◆ プログラムによるセットアップ</h4>
<p>データソースをプログラム的に追加するには、SQLConfigDataSource ODBC API 関数が利用できます。</p>
<h4>◆ データソース高度な設定</h4>
<p>データソースの「高度な設定」画面は３ページに分かれています。多数のパラメータがあり、これらの大部分は接続文字列や INI ファイル指定でも与えられます。</p>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/psqlODBC_2.png" alt="図 2： 高度な設定 - 設定 1 画面" width="600" /></p>
<p style="margin-top: 0px;">図 2： 高度な設定 &#8211; 設定 1 画面</p>
</div>
<p>設定１画面で指定できる項目は以下の通りです。INI ファイルでのパラメータ名、接続文字列に使える短縮形パラメータ名との対応付けも示します。なお、スクリーンショットの内容はデフォルトの値です。</p>
<table style="margin-top: 10px; margin-bottom: 20px;" border="1" cellspacing="0">
<tbody>
<tr style="text-align: center; background-color: #fffacd;">
<td>GUI 設定項目</td>
<td>INI 設定名 / 短縮形</td>
<td>意味</td>
</tr>
<tr>
<td>ユニークインデックスを使う</td>
<td>UniqueIndex / （短縮名なし）</td>
<td>通常、真(=1)にします。<br />
SQLStatistics に影響します。</td>
</tr>
<tr>
<td>Declare ～ Fetch を使用する</td>
<td>UseDeclareFetch / B6</td>
<td>明示的なカーソルを使って問い合わせ結果を取り出します。</td>
</tr>
<tr>
<td>一般ログ出力をする</td>
<td>CommLog / B3</td>
<td>コミュニケーションログを出力するかを指定します。アプリケーションのデバッグに有用です。</td>
</tr>
<tr>
<td>ステートメントの構文解析を行う</td>
<td>Parse / C0</td>
<td>真（= 1）にすると、SQLNumResultCols 、 SQLDescribeCol 、 SQLColAttributes についても文を解析するようになります。</td>
</tr>
<tr>
<td>詳細ログ出力をする</td>
<td>Debug / B2</td>
<td>デバッグログを出力するかを指定します。MyLog とも呼ばれます。ドライバ自体のデバッグに有用です。</td>
</tr>
<tr>
<td>未知サイズ動作</td>
<td>UnknownSizes / A9</td>
<td>0:最大をとる 、1:特定しない:、2:最長をとる、の何れかをとります。SQLDescribeCol と SQLColAttributes が varchar などの可変長文字列データ型サイズをどう答えるかを指定します。0 はデータ型としての最大値、2 は存在する行の最大値を返し、1 は不明と返します。</td>
</tr>
<tr>
<td>text を長文字列として扱う</td>
<td>TextAsLongVarchar / B7</td>
<td>真（= 1）なら text 型を SQL_LONGVARCHAR に対応付けます。偽（= 0）なら SQL_VARCHAR です。</td>
</tr>
<tr>
<td>不明を長文字列として扱う</td>
<td>UnknownsAsLongVarchar / B8</td>
<td>真なら配列型などの決まった対応付けがない型を SQL_LONGVARCHAR に対応付けます。偽（= 0）なら SQL_VARCHAR です。</td>
</tr>
<tr>
<td>Char として Boolean を扱う</td>
<td>BoolsAsChar / B9</td>
<td>真なら boolean 型を SQL_CHAR に対応付けます。偽（= 0）なら SQL_BIT です。</td>
</tr>
<tr>
<td>最大 Varchar</td>
<td>MaxVarcharSize / B0</td>
<td>SQL_VARCHAR 型に対応付けされるデータ型の最大長。これはサイズを聞かれたときの答えであり、SQLGetData で指定値より長いカラム値の文字列取得も可能。</td>
</tr>
<tr>
<td>最大 LongVarChar</td>
<td>MaxLongVarcharSize / B1</td>
<td>SQL_LONGVARCHAR に対応付けされるデータ型の最大長。これはサイズを聞かれたときの答えであり、SQLGetData で指定値より長いカラム値の文字列取得も可能。<br />
SQL_NO_TOTAL に相当する -4 を設定して、サイズ不明という応答させることも可能。</td>
</tr>
<tr>
<td>キャッシュサイズ</td>
<td>Fetch / A7</td>
<td>問い合わせ結果のデータを取得する際の一度に取得する行数。繰り返し少数行を取得するときにまとめて取得して高速化するための設定です。大量取得を少しずつの取得にして使用メモリ量を減らす設定ではありません。</td>
</tr>
<tr>
<td>システムテーブルプレフィックス</td>
<td>ExtraSysTablePrefixes / C2</td>
<td>セミコロン（;）区切りでいくつか指定できます。このプレフィックスがあるとシステムテーブル扱いになります。<br />
本欄に指定がなくとも「pg_」で始まるテーブルはシステムテーブル扱いになります。</td>
</tr>
<tr>
<td>バッチサイズ</td>
<td>BatchSize / D8</td>
<td>パラメータ配列でバッチ実行するときのチャンクサイズ。バージョン12.02.0000 から。</td>
</tr>
<tr>
<td>タイムアウト無視</td>
<td>IgnoreTimeout / D9</td>
<td>SQLSetStmtAttr() で指定する SQL_ATTR_QUERY_TIMEOUT を無視するかを指定します。バージョン12.02.0000 から。</td>
</tr>
</tbody>
</table>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/psqlODBC_3.png" alt="図 3： 高度な設定 - 設定 2 画面" width="600" /></p>
<p style="margin-top: 0px;">図 3： 高度な設定 &#8211; 設定 2 画面</p>
</div>
<p>設定2画面の設定項目は以下の通りです。</p>
<p>各refcursorから結果を取得しますFetchRefcursors / DA設定が 1 なら refcursor を返す関数の結果を自動的に FETCH して、複数行を返す関数と同様に振舞う。デフォルトの 0 なら単にカーソル名が返る。バージョン 13.02.0000 から。</p>
<table style="margin-top: 10px; margin-bottom: 20px;" border="1" cellspacing="0">
<tbody>
<tr style="text-align: center; background-color: #fffacd;">
<td>GUI 設定項目</td>
<td>INI 設定名 / 短縮形</td>
<td>意味</td>
</tr>
<tr>
<td>リードオンリィ</td>
<td>ReadOnly / A0</td>
<td>真（= 1）なら読み込み専用になります。その場合も、更新を含む SELECT は実行可能です。</td>
</tr>
<tr>
<td>バージョン列表示</td>
<td>RowVersioning / A4</td>
<td>真なら、行が更新されたことを検知するために使われるバージョン列を有効にします。SQLColumns 結果に xmin 列が加わります。MS-ACCESS むけ機能です。</td>
</tr>
<tr>
<td>システムテーブルを表示</td>
<td>ShowSystemTables / A5</td>
<td>真なら SQLTables でシステムテーブルを通常テーブルと同様に返します。</td>
</tr>
<tr>
<td>LF &lt;-&gt; CR/LF 変換を行う</td>
<td>LFConversion / C5</td>
<td>真なら 取得したテキストデータの LF を CR LF に変換します。逆向きの変換はありません。</td>
</tr>
<tr>
<td>-1 を真値とする</td>
<td>TrueIsMinus1 / C6</td>
<td>真なら TRUE を &#8216;-1&#8217; として返します。さもなくば &#8216;1&#8217; です。</td>
</tr>
<tr>
<td>更新可能カーソル</td>
<td>UpdatableCursors / C4</td>
<td>真なら更新可能カーソルをエミュレートします。</td>
</tr>
<tr>
<td>サーバ側 Prepare</td>
<td>UseServerSidePrepare / C8</td>
<td>真ならサーバ側プリペアドステートメントを使用します。</td>
</tr>
<tr>
<td>bytea を LO として扱う</td>
<td>ByteaAsLongVarBinary / C7</td>
<td>真(= 1) なら SQL_LONGVARBINARY に bytea 型を使います。他に lo ドメイン（実体は oid 型）が使用できます。</td>
</tr>
<tr>
<td>Int8 の代替定義</td>
<td>BI / （短縮名のみ）</td>
<td>以下の値を取ります。</p>
<table>
<tbody>
<tr>
<td>デフォルト</td>
<td>0</td>
</tr>
<tr>
<td>bigint（SQL_BIGINT)</td>
<td>-5</td>
</tr>
<tr>
<td>numeric (SQL_NUMERIC)</td>
<td>2</td>
</tr>
<tr>
<td>varchar (SQL_VARCHAR)</td>
<td>12</td>
</tr>
<tr>
<td>double（SQL_REAL)</td>
<td>7</td>
</tr>
<tr>
<td>int4 (SQL_INTEGER)</td>
<td>4</td>
</tr>
</tbody>
</table>
<p>int8 列がどのデータ型として報告されるかを指定します。<br />
デフォルトは接続オプションで &#8220;Microsoft Jet&#8221; の指定がある場合だけ SQL_NUMERIC で、さもなくば SQL_BIGINT です。</td>
</tr>
<tr>
<td>エラー時のロールバック発行</td>
<td>Protocol / A1</td>
<td>以下の値を取ります。「7.4」部分はプロトコル指定ですが今日指定すべきは「7.4」だけです。その後のハイフン以降でロールバックの挙動を指定します。</p>
<p>7.4 : デフォルト（選択無し）<br />
接続先が PostgreSQL 8.0 以上なら「文単位」、さもなくば「全キャンセル」になります。</p>
<p>7.4-0 : 無し<br />
エラー時もドライバは ROLLBACK を発行しません。ロールバック発行はアプリケーションの責任となります。</p>
<p>7.4-1 : 全キャンセル<br />
エラー時にドライバが ROLLBACK を発行します。</p>
<p style="margin-bottom: 0px;">7.4-2 : 文単位<br />
ドライバは暗黙に文ごとに SAVEPOINT を設定して、エラー時に直近 SAVEPOINT までの ROLLBACK を発行します。負荷が高い動作となります。</p>
</td>
</tr>
<tr>
<td>[ OID オプション] カラム列表示</td>
<td>ShowOidColumn / A3</td>
<td>真なら SQLColumns 、 SQLStatistics に OID 列を含めます。</td>
</tr>
<tr>
<td>[ OID オプション] インデックスを装う</td>
<td>FakeOidIndex / A2</td>
<td>真なら OID 列がユニークキーであるように見せかけます。真の主キー列が無くて、アプリケーションが主キー列を要求する場合に使います。</td>
</tr>
<tr>
<td>特別なオプション</td>
<td>AB / （短縮名のみ）</td>
<td>以下の和を16進数で与えます。</p>
<p>1 BIT_FORCEABBREVCONNSTR<br />
短縮形パラメータを必ず使用します。</p>
<p>2 BIT_FAKE_MSS<br />
サーバがSQL Server であるかのように偽装します。</p>
<p>4 BIT_BDE_ENVIRONMENT<br />
BDE（Borland Database Engine）に対応させます。</p>
<p>8 BIT_CVT_NULL_DATE<br />
NULL日付を空文字列に変換します。FOXPROむけフラグ。</p>
<p>16 BIT_ACCESSIBLE_ONLY<br />
SQLTables が参照可能なテーブルだけ返します。</p>
<p style="margin-bottom: 0px;">32 BIT_IGNORE_ROUND_TRIP_TIME<br />
往復時間を無視できることを示すフラグ。マルチSQLを分割発行するかの判断に使用。</p>
</td>
</tr>
<tr>
<td>接続時設定</td>
<td>ConnSettings / A6</td>
<td>接続時に実行する SQL 文を記述できます。「;」区切りで複数記述できます。</td>
</tr>
<tr>
<td>TCP KEEP ALIVE</td>
<td>KeepaliveTime / D1<br />
KeepaliveInterval / D2</td>
<td>OS の TCP KeepAlive 機能の待ち時間（＝ アイドル時間）と応答時間（＝ インターバル時間）を指定します。</td>
</tr>
<tr>
<td>Numeric(精度指定なし)の代替定義</td>
<td>NumericAs / D6</td>
<td>精度指定なしの数値を割り当てる型を numeric(デフォルト)、varchar、double、memo（SQL_LONGVARCHARの意味）から指定します。バージョン12.02.0000 から。</td>
</tr>
<tr>
<td>補助的エラーメッセージを表示</td>
<td>OptionalErrors / D7</td>
<td>エラーメッセージとして、DETAILやHINT、ステートメント位置なども出力するかを指定します。バージョン12.02.0000 から。</td>
</tr>
</tbody>
</table>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/psqlODBC_4.png" alt="図 4： 高度な設定 - 設定 3 画面" width="600" /></p>
<p style="margin-top: 0px;">図 4： 高度な設定 &#8211; 設定 3 画面</p>
</div>
<p>設定3画面の設定項目は以下の通りです。</p>
<table style="margin-top: 10px; margin-bottom: 20px;" border="1" cellspacing="0">
<tbody>
<tr style="text-align: center; background-color: #fffacd;">
<td>GUI 設定項目</td>
<td>INI 設定名 / 短縮形</td>
<td>意味</td>
</tr>
<tr>
<td>MSDTC リカバリ不可接続を許可？</td>
<td>XaOpt / D4</td>
<td>MSDTC を使う場合に接続確認をするかどうかの設定です。「する」の方が接続確認をしない動作になります。</p>
<ol>
<li>する</li>
<li>verify-ca 、verify-full モードの SSL なら拒絶</li>
<li>しない</li>
</ol>
</td>
</tr>
<tr>
<td>接続テスト</td>
<td>&#8211;</td>
<td>設定ではなく、この場で分散トランザクションによる接続テストをするボタンです。</td>
</tr>
<tr>
<td>libpq パラメータ</td>
<td>pqopt / D5</td>
<td>PostgreSQL 接続文字列の形式（空白区切りで 項目 = 値 の並び）で libpq ライブラリに与えるパラメータを指定できます。sslrootcert や sslcert 、 sslkey を指定するに有用です。</td>
</tr>
</tbody>
</table>
<h4>◆ パラメータ設定のポイント</h4>
<p>ほとんどのパラメータはデフォルトのままで問題ありません。<br />
特定のアプリケーションで動作しないことに対する対策としてパラメータが追加された結果、パラメータ数が多数となっています。</p>
<h3 style="margin-top: 40px;">4. 使用例 (Windows)</h3>
<h4>◆ Officeから使う</h4>
<p>ODBC データソースは様々なアプリケーション、開発言語・環境にて使用できます。ここでは Microsoft Office の Excel を使って接続と SQL 実行のテストをしてみます。「その他のデータソース」の「 Microsoft Query 」を選択します。</p>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2019/07/psqlODBC_5.png" alt="図 5： Excel 画面例" width="600" /></p>
<p style="margin-top: 0px;">図 5： Excel 画面例</p>
</div>
<p>データソースの選択で作成した PostgreSQL のデータソースを選択します</p>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2019/07/psqlODBC_6.png" alt="図 6：データソース選択" width="600" /></p>
<p style="margin-top: 0px;">図 6：データソース選択</p>
</div>
<p>クエリウィザードでテーブルを選択します。ここでは仮に 1テーブルだけ追加します。</p>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2019/07/psqlODBC_7.png" alt="図 7：クエリウィザード初期選択画面" width="600" /></p>
<p style="margin-top: 0px;">図 7：クエリウィザード初期選択画面</p>
</div>
<p>テーブルの結合を GUI 操作で記述できます。ここで任意に SQL を追加したり、結合や選択条件を指定できます。</p>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2019/07/psqlODBC_8.png" alt="図 8：Microsoft Query 画面" width="600" /></p>
<p style="margin-top: 0px;">図 8：Microsoft Query 画面</p>
</div>
<p>Microsoft Query で SQL 実行した結果を Excel に取り込むことができます。</p>
<div style="text-align: center;">
<p><img decoding="async" class="alignnone size-medium wp-image-1058" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2019/07/psqlODBC_9.png" alt="図 9：データ取り込み結果" width="600" /></p>
<p style="margin-top: 0px;">図 9：データ取り込み結果</p>
</div>
<h4>◆ PowerShellから使う</h4>
<p>続いて、クライアントプログラムから使う例の 1つとして、PowerShell から ODBC を通してデータベースアクセスする例を示します。</p>
<p>以下は、作成済のデータソース「pgsql18_db1_ANSI」にユーザ名、パスワードを指定して、データベース接続を行って、t1 テーブルから 5行を取り出しています。</p>
<pre>PS&gt; $conn = New-Object System.Data.Odbc.OdbcConnection
PS&gt; $conn.ConnectionString = "DSN=pgsql18_db1_ANSI;Uid=dbuser1;Pwd=passwd1;"
PS&gt; $conn.Open()
PS&gt; $cmd = $conn.CreateCommand()
PS&gt; $cmd.CommandText = "SELECT * FROM t1 LIMIT 5"
PS&gt; $reader = $cmd.ExecuteReader()
PS&gt; while ($reader.Read()) { Write-Output "$($reader['id']) : $($reader['v'])" }
1 : AAA
2 : BBB
3 : CCC
4 : DDD
5 : EEE
PS&gt; $conn.Close()
</pre>
<h3 style="margin-top: 40px;">5. Linux での使用</h3>
<p>Linux や各種 UNIX 上で動作する ODBC API を提供するライブラリを使用して、 ODBC 接続をすることができます。オープンソースでよく使われているのが unixODBC です。これは RedHat Enterprise Linux などの主要ディストリビューションで標準パッケージとして含まれています。本節では Rocky 8.x にて unixODBC を使用する例を説明します。</p>
<h4>◆ インストール</h4>
<p>unixODBC は以下のように OS パッケージからインストールします。</p>
<pre># dnf install unixODBC unixODBC-devel
</pre>
<p>psqlODBC を unixODBC むけにソースコードからビルドする手順は以下のようになります。ただし、 psqlODBC はビルドしにくい部類のソフトウェアです。ODBC API ライブラリ（ここでは unixODBC ）とのバージョン組み合わせにもよるのですが、エラーが発生し、ビルドを成功させるために CFLAGS 環境変数でプリプロセッサ変数を指定したり、Makefile の補正が必要になることがあります。</p>
<pre>$ ./configure --with-unixodbc=/usr/lib64 
    --with-libpq=/usr/pgsql-18
$ make
$ su -c 'make install'
</pre>
<p>お勧めは バイナリパッケージを使うことです。<br />
<a href="https://yum.postgresql.org/">PostgreSQL RPM Building Project</a> のパッケージとして「 postgresql18-odbc 」という名前でパッケージが用意されています。「18」部分はリポジトリの PostgreSQL バージョン系列が 18 系であれば 18 、 17 系であれば 17 となります。依存関係はクライアントライブラリだけですので、 PostgreSQL サーバのパッケージを導入する必要がありません。</p>
<pre># dnf install postgresql18-odbc
</pre>
<h4>◆ 設定</h4>
<p>unixODBC の設定方法を示します。<br />
以下のようにドライバの定義を /etc/odbcinst.ini に記述します。32 bit 環境なら Driver64 でなく Driver にライブラリを指定します。FileUsage は必ず 1 です。 Threading はマルチスレッド動作での保護レベルの指定で、通常は接続単位で保護する 2 を指定します。</p>
<pre>[PostgreSQL]
Description     = ODBC for PostgreSQL
Driver64        = /usr/pgsql-18/lib/psqlODBCw.so
FileUsage       = 1
Threading       = 2
</pre>
<p>データソースの定義を /etc/odbc.ini または、ユーザ毎の ~/.odbc.ini に以下のように記述します。ここで設定できる項目は、前節の設定一覧表で「 INI 設定名」として示したものとなります。</p>
<pre>[PostgreSQL_DS1]
Description         = PostgreSQL Datasource 1
Driver              = PostgreSQL
Database            = db1
Servername          = dbhost.example.com
Port                = 5432
Protocol            = 7.4-2
CommLog             = 0
Debug               = 0
</pre>
<p>接続テストをするには unixODBC に付属する isql コマンドを使うのが簡単です。以下のように使用できます。</p>
<pre>[host]$ isql PostgreSQL_DS1 dbuser pass
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL&gt; SELECT id FROM t1 ;
+------------+
| id         |
+------------+
| 1          |
| 2          |
| 3          |
+------------+
SQLRowCount returns 3
3 rows fetched
SQL&gt; quit
[host]$
</pre>
<p>なお、ログファイルは /tmp 以下に出力されます。今のところログディレクトリは指定できません。CommLog = 1 なら psqlODBC_ で始まるログファイルが、Debug = 1 なら mylog_ で始まるログファイルが出力されます。</p>
<h4>◆ クライアントプログラムから使う</h4>
<p>もっとも基本的なC言語でのクライアントプログラム例は、<a href="https://www.unixodbc.org/doc/ProgrammerManual/Tutorial/">unixODBC の付属文書</a>が参考になります。各種プログラミング言語からの ODBC を使ったデータベースアクセスをするコードの書き方は、それぞれのプログラミング言語の ODBC接続ライブラリのドキュメントを参照してください。</p>
<h3 style="margin-top: 40px;">6. まとめ</h3>
<p>本文書では psqlODBC について基本的な情報を取りまとめました。<br />
このほか実際に使用するには、各アプリケーションあるいはアプリケーション開発言語・環境における ODBC 接続によるデータベースアクセスを行うライブラリ関数群の使用方法を把握する必要があります。これらは多岐にわたるため、本文書での説明は割愛しています。<br />
特定アプリケーション、アプリケーション開発言語・環境にて動作しない場合については、 <a href="https://odbc.postgresql.org/">psqlODBC 公式ページ</a>にある FAQ や HOWTOs 文書の記載が役立つことがあります。これらも確認してください。</p>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
