• PostgreSQLにWindowsからODBCで接続する

    linux上で動いているPostgreSQLサーバにWindowsからODBC経由でアクセスする。
    本家でODBCドライバが提供されているのでこれを導入すればOK

    導入

    • PostgreSQL: FTP Browser(Top → odbc → versions → msi)からアーカイブをダウンロードする。今回使ったのは、psqlodbc-08_01_0200.zip
    • ダウンロードしたアーカイブを適当な場所において展開。中身はセットアップ(msi)なので、いつものようにセットアップ。インストール先など適宜選択。

    データソース設定

    • (XP Proの場合)コントロールパネル→管理ツール→データソース(ODBC)
    • 登録先がいくつかあるが、今回は「ユーザDSN」を選択。「システムDSN」を選択すれば他のユーザからも使える。
    • 「ユーザDSN」タブを選択して、「追加ボタン」。ODBCドライバのリストから「PostgreSQL Unicode」を選択。
      ドライバ選択
    • データソース名もろもろを設定。データソース名はいずれ接続文字列として選択するのでわかりやすい名称に。
      データソース設定
    • navicatなどのツールだと接続設定のダイアログから抜けないで接続確認ができるのだが、ODBCデータソースの設定からは出来ず。不便だ。

    接続確認

    • ExcelかAccessがあれば、簡単にODBCデータソースに接続してアクセスできるかどうか確認できる。ここではAccessを使った。
    • Accessを起動して適当な空のデータベースを作る。で、テーブルの新規作成→テーブルのリンク。ファイルの種類で「ODBCデータベース」を選ぶ。
    • データソース選択のダイアログを現れるので、先に登録したデータソースを選ぶ。(ここで「新規作成」してもいいようだ)
      データソース選択
    • PostgreSQLテーブルの一覧からリンクを作成したいテーブルを選ぶ。
    • テーブル一覧に新たなテーブルリンクアイコンが表示されるので、適宜中身をいじくる。
  • PostgreSQL 8.1.3 インストール

    ふとした思い付きでPostgreSQLを導入する。
    使ってる環境がFedora Core 3なのだが、FC公式リポジトリには7.xしかない。PostgreSQL本家に8.1.3のrpmがあったもののarchが686で、自サーバでは動かず。unameでi686って出てるんだけどな~。EDENだから?

    導入

    • PostgreSQL: FTP Browser(Top → source → v8.1.3)からtar玉をダウンロードする。今回使ったのは、postgresql-8.1.3.tar.gz。
    • ダウンロードしたアーカイブを適当な場所において展開。
    • いつものconfigure → make → make install。今回は↓で。
      ./configure --enable-thread-safety --without-docdir
    • tar玉に同梱されている「INSTALL」のShort Version風で、さくっと確認。
      # adduser postgres
      # mkdir ~postgres/data
      # chown postgres:postgres ~postgres/data
      # su - postgres
      (profile中のPATH設定に/usr/local/pgsql/bin/を追加)
      % initdb -D ~/data
      % pg_ctl start -D ~/data
      % createdb test
      % psql test
      test=# select * from pg_catalog.pg_tables;
      ~テーブルの一覧~

    設定

    • デフォルトの状態では、他ホストからの接続を受け付けないので、許可を追加する。
    • data/pg_hba.confに許可IPを追加。
      host all all 192.168.1.0/24 trust
    • data/postgresql.confにLISTENアドレスを設定。
      listen_addresses = '*'
    • iptablesで許可するのを忘れがち。(デフォルトの場合)tcpポート5432を許可。
      FC3の場合、/etc/sysconfig/iptablesを編集して
      # /etc/init.d/iptables restart
    • ログがstderrに出るのは好まないのでsyslogに変更
      log_destination = 'syslog'
    • ついでに接続関係もログるように変更
      log_connections = on
      log_disconnections = on
      log_duration = on
    • postmasterを再起動。