ORCAのデータをMacにインポート(Mac OS X)


Windowsを介さずにMacだけでORCAのデータをインポートする手段も一応作ってみました。
ORCAサーバー上にMacとの共有ディレクトリを用意して、そこにデータを書き出し参照します。

(1)共有ディレクトリを使えるように準備する

(ORCAサーバー側の設定)
NFSをインストールする
$ sudo apt-get install nfs-user-server

共有用のディレクトリを作成する
$ sudo -u orca mkdir /home/orca/mac

nfsの設定ファイルを編集する
$ sudo vi /etc/exports

下記1行を記述(数字はMacのIPアドレス)
/home/orca/mac 192.168.1.51(rw,insecure)

設定変更を反映させる
$ sudo /etc/init.d/nfs-user-server reload


(2)既定のテーブルを定期的に書き出して自動更新するには

(ORCAサーバー側の設定)
ORCAのデータをS-JISのcsvファイルに書き出すシェル・スクリプトを作成する
$ sudo -u orca vi /home/orca/dbexport.sh

下記3行を記述(この例ではtbl_ptinfから全ての列を書き出すという内容)
#!/bin/sh
psql -A -t -q -F , -c “SELECT *FROM tbl_ptinf ORDER BY ptid” orca &> /home/orca/mac/result
nkf -s /home/orca/mac/result > /home/orca/mac/result.csv

(psql から result まで1行です)

実行権をつける
$ sudo chomod +x /home/orca/dbexport.sh

定期的に更新されるようにスクリプトをcronに登録する
$ crontab -e
下記1行を記述(この例では10分毎に更新する設定)
0,10,20,30,40,50 0-23 1-31 1-12 0-7 sudo -u orca /home/orca/dbexport.sh

(Macでの操作)
Finderの移動メニュー → サーバーへ移動
でサーバアドレスに下記を指定(数字はORCAサーバーのIPアドレス)

nfs://192.168.1.57/home/orca/mac

接続ボタンをクリックすると共有ディレクトリがデスクトップにマウントされ、result.csvファイルへアクセス出来るようになります。
なお、psqlコマンドのtオプションをはずすと、一行目にカラム名、最終行に行数がついた出力になります。


(3)随時手動でテーブル名を指定してインポートするには

(ORCAサーバー側の設定)
シェル・スクリプトを作成する
$ sudo -u orca vi /home/orca/tblselect.sh

以下の5行を記述する。
#!/bin/sh
echo -n “type table-name you want. tbl_ :”
read tblname
psql -A -t -q -F , -c “SELECT *FROM tbl_$tblname” orca &> /home/orca/mac/$tblname
nkf -s /home/orca/mac/$tblname > /home/orca/mac/$tblname.csv

(psql から
$tblname まで1行です)

実行権をつける
$ sudo chmod +x /home/orca/tblselect.sh

(Macでの操作)
Macのターミナルにて以下のコマンドを実行(数字はORCAサーバーのIPアドレス)

ssh 192.168.1.57 sudo -u orca /home/orca/tblselect.sh

パスワードの入力要求に応えると、
type table-name you want. tbl_ :
が表示されるので、テーブル名(例:pthkninf)をタイプしてEnter。
以上で/home/orca/macにpthkninf.csvが作成されます。

Macで実行するコマンドは以下のようにAppleScriptにして保存しておけば、アイコンのダブルクリックで処理を実行できます。

tell application "Terminal"
  do script "ssh 192.168.1.57 sudo -u orca /home/orca/tblselect.sh"
end tell



なお、存在しないテーブル名を指定した場合、
ERROR: Relation "tbl_存在しないテーブル名" does not exist
という内容のファイルが作成されます。


psqlコマンドにはデータを引用符で括って出力するようなオプションがないようなので、改行が含まれているデータがあればまともなcsvになりません。
orcaデータベースのテーブルを調べてみると、例外的とは思われますが、tbl_yakujyoのサンプルデータに実例がありました。

JPN102020100009 ,661310221,1,タリビッド眼軟膏 0.3%,,医師の指示通りに服用してください。
発疹・かゆみ等の過敏症が現れた時は服用を中止し、医師に相談して下さい。
,,,,,,,20030711, ,

causion列(赤い文字の部分)の途中で改行されて、1件のレコードが2行に分断されています。

下記は句点と連続する改行を検索して取り除くAppleScript。
邪魔な改行のせいで乱れたcsvファイルを共有ディレクトリからMacにコピーし、このAppleScriptのアイコンにドラック&ドロップすると、修正後の内容を新しいファイルに書き出します。

on open drop_items
  tell application "Finder"
    repeat with obj in drop_items
      set dropFile to obj as string
      set fileNAME to dropFile as string
      open for access file fileNAME
      read file fileNAME
      set TXT to result
      close access file fileNAME
      set defaultDelim to AppleScript's text item delimiters
      set AppleScript's text item delimiters to "。" & (ASCII character (10))
      set TXT to every text item of TXT
      set AppleScript's text item delimiters to "。"
      set TXT to TXT as string
      set AppleScript's text item delimiters to defaultDelim
      set fileNAME to fileNAME & ".修正"
      open for access file fileNAME with write permission
      write TXT to file fileNAME
      close access file fileNAME
    end repeat
  end tell
end open




HOME  TOP↑  ORCAのページのTOP