LabVIEW+PostgreSQL
LabVIEWで取得するデータはPostgreSQLに保存。ということで、データベースアクセス用のVIを用意したい。
以前はPackage ManagerをつかってPostgreSQL用のツールをインストールして使っていた(LabVIEW2011)。ところが、LabVIEW2018・2019で検索しても出てこない。さて、こまったということで、Database Connectivity Toolkit を使う方法を選択。
データベースへの接続はWindowsのODBCサービス?を使い、SQLの方はToolkitで処理というものだと理解した。
ODBCのPostgreSQLドライバーをインストールすると、ODBCデータソースのセットアップツールで、PostgreSQLを選択できる。注意しないといけないのは、32ビット・64ビットバージョンのドライバがあるのだが、これはデータソースを使うアプリのバージョンに合わせるというところ。PostgreSQLサーバーのバージョンではない。LabVIEWが32ビットなら、ODBCデータソースも32ビット。
データソースセットアップツールで付けた名前を指定すると、ToolkitをからODBCを介してデータベースのアクセスできる。なかなかうまいやり方なのかもしれない。
接続も成功したのでデーターベースをセットアップしようとして、もう一つ躓いた。
PostgreSQLは基本テーブル名等で大文字・小文字は区別しない。ただし、例外的にダブルクォーテーションでくくると大文字・小文字を使うことができる。
データベース・テーブル・カラムをいちいちSQL書いてセットアップするのは面倒なので、pgAdmin をつかってインタラクティブに済ませたい。名前をつけるとき、大文字小文字を使いわけられると命名しやすい。
大文字が混ざった名前を付けてしまったのがそもそもの問題なのだが、二つの問題が発生。
pgAdmin 4 での問題
たとえばTestTableというテーブルを作って見る。SQLでは "TestTable"と指定され、大小交じりの名前がついた。次に、TestTableを継承してChildTableを作ってみる。エラー発生。原因はSQL文でダブルクォーテーションが %20 に変換されてしまう。全ての場所というわけではなく、INHERIT構文の中だと何故か変換される。
別PC(Fedora)で pgAdmin3 が使えたので、pgAdmin3 on Fedora で試してみると、そんなエラーは起きずに、ちゃんとダブルクォーテーションのままでテーブルを作成できた。
しめしめ。
Database Connection Toolkit での問題
Toolkitのせいにしては駄目かもしれないが、次の問題はToolkit使用時に発生。接続テストを兼ねて、テーブルリストを取得し、各テーブルのカラムリストを取得するサンプルプログラムを作ってみた。
テーブル名はデータベースから取得したものをそのまま利用する。エラーがおきるとは想定していなかったのだが、エラー。TestTable って名前なのに testtable としてクエリをかけており、テーブルが見つからないよ、との事。
当然、ダブルクォーテーションでくくってあげれば正しくカラムリストを取得できるのだが、VIを使うユーザーが対応しないといけない。それならテーブル名を取得するときにダブルクォーテーションを付加して返してくれといいたい。
解決方法
面倒なのですべて小文字でセットアップしましょう。ということ。