2008/08/04 (月)

2008-06-30:PostgreSQLとMySQLのUPDATE構文

あるテーブルに UPDATE かけたくて、しかし対象行の検索には別のテーブルを結合したいビューを使いたい、という場合のオハナシ。

PostgreSQL の場合、UPDATE 文に FROM 句が使えて、ここに WHERE 句で使いたいテーブル・ビューを記述できる。
例を書くと、

UPDATE table_name as t
   SET target_column_name = value
  FROM view_name as v
 WHERE t.where_column_name = v.where_column_name
   and v.search_column_name = search_value;

のような形。

が、同じことを MySQL でやろうとしたら、怒られた。MySQL では FROM 句が使えない。
MySQL の場合は単純に UPDATE のターゲットテーブルと併記すればよい。

UPDATE table_name as t, view_name as v
   SET target_column_name = value
 WHERE t.where_column_name = v.where_column_name
   and v.search_column_name = search_value;

SQL92 標準的にどうなのかは知りません。だれか教えてください。:-)

そんなことより、今日 MySQL のマニュアル読んでてびっくりしたのは、UPDATE 文にORDER BY 句が使えること。指定した順で更新されていく。

なんの意味があるんだろう?

やっぱり MySQL は変態だなぁ、と思った(誉めてます)。

comment

2005/08/20 (土)

2005-08-20:PostgreSQL for Windows

いまさらですが、Version 8 からネイティブ動作がサポートされた Windows 用 PostgreSQL を試してみた、というメモ。
けっこうお手軽。

お役立ちリンク

ページ内リンク


インストール

バイナリのゲット

FTP サイトから postgresql-8.0.3-ja.zip をもらってくる。
インストーラが日本語化されていてベンリ。

インストール

zip ファイルを開いて、postgresql-8.0-ja.mxi を実行する。
インストーラが立ち上がり、ライセンス条項が表示される。

ついでインストールするコンポーネントの選択。
わたしは PgAdmin は使わないので選択からはずした。
ほかにインストールする接続ドライバ(ODBC とか JDBC とね)が選べたり。
インストールする場所はデフォルトのままでいいっしょ。
# デフォルトは \Program Files\PostgreSQL\8.0

次は PostgreSQL をどのようなサービスとして起動するかの設定。
サービス名・サービスを実行するアカウント名など。
Unix で PostgreSQL を root であげるべきでないのと同じく、Windows で PostgreSQL を Administrator であげるべきではない。
PostgreSQL のインストーラーはここで新しいアカウントを作ってくれる。
PostgreSQL のサービスを実行するアカウント名とパスワードを入力しよう。

既存のユーザーを指定すればそのユーザーで、新しいユーザー名をいれれば新規にアカウントを作成した上で、そのユーザーでの実行になる。

# ちょろいパスワードを入れると怒られるが、いいえを選べばそのままでも大丈夫。

正常に登録できると以下のメッセージがでる。

続いてデータベースクラスタの初期化設定。unix でいう initdb に相当するものかな。
エンコーディングはデフォルトが EUC_JP になっている(さすが日本語インストーラー)。
データベースクラスタのスーパーユーザー名をここで指定する。
これは Windows でのアカウントとはまったく別個で、PostgreSQL のデータベース上でのアカウント管理になる。
unix だと initdb を実行したアカウントが自動的に PostgreSQL 上でも作られるけどね。
画面上では自分のユーザーアカウント名を指定している。

ちなみに上で「すべてのアドレスでコネクションを受け入れる」をチェックしているが、これをはずすと localhost からしか受け付けなくなる。
まぁ、ここでどう設定しようと、あとからちゃんと pg_hba.conf を設定しろよ、ということだと思うんだが。

次はストアドプロシジャとして使う言語の選択。
そもそも私はここらへん使わないのだけど。。。(^^;
インストールするコンポーネントで選ばなかったものは選択できない。

contrib なもののインストール選択。ごめん、一個も選んでない。

以上でインストール実行前の設定は終了。いざインストール。

しばらく待つと終了。

とりあえず動作確認として psql でデータベースにつないでみよう。
コマンドプロンプトを起動して \Program Files\PostgreSQL\8.0\bin に移動。
psql で接続。
あっさりとふつーにつながる。


設定

サービスの確認

[コントロールパネル]→[管理ツール]→[サービス] を選択。
ちゃんと PostgreSQL がいる。

サービスを停止して設定ファイルの編集

[サービス] の一覧から PostgreSQL を選びプロパティを表示する。

停止を押してサービスを停止させる。
設定ファイルは \Program Files\PostgreSQL\8.0\data 以下。
とりあえず以下のファイルの設定をチェック。

  • pg_hba.conf
  • postgresql.conf

どう設定すべきかは。。。てきとーにぐぐってください。(なげやり)

サービスを再開して設定のチェック

ふたたびさきほどのプロパティで、今度は開始を押してサービスを再開。
わたしは pg_hba.conf をいじって、同じセグメントのマシンからの接続を許可するようにしたので、この Windows マシンで動いている coLinux から psql で接続できるか確認。
。。。が、できなかった。あれれ? と悩むこと1分。

Windows のファイヤーウォール機能でした。

5432 ポートをブロックしないようにして、再度やってみたら問題なく接続。

# psql の表示で 7.4.5 とあるのは、coLinux 内でインストールしているのが 7.4.5 だからです。


使う

なんというか、ふつーに動くので、そのままふつーに使ってください。:-)

以前、cygwin 上に苦労してビルドしてたのはなんだったんだ、という感じ。
とっても楽チンに環境がインストールされる。
開発者のみなさまに感謝!

comment

2005-08-20:PostgreSQL for Windows

長いので別ページに。
PostgreSQL for Windows

comment

2004/01/09 (金)

2004-01-09:perl みんな忘れてる

オフィスで perl で PostgreSQL をいじる話題が出て、けっこうみんな perl を忘れている事件。
そして、やっぱ Ruby でしょ、とか PHP5 ってどうなのよ、といった話題になる。ありがちすぎ。

comment

2003/07/26 (土)

2003-07-26:TomcatとPostgreSQL

とむ猫と遊ぼう、ということで、てもとのマシンに J2SE を入れて、tomcat41 を入れて、mod_jk2 を入れる。
PostgreSQL の JDBC ドライバが servlet から使えない。。。としばらく悩む。
どうも Tomcat の起動スクリプトから呼ばれる setclasspath.sh というのがCLASSPATH をぶっこわしてくれていたらしい。ここを修正したらシアワセになれた。

comment