[ Postgresql ] uuid を生成する

以下、
$ で始まるコマンドは、linux の一般ユーザでのコマンド。
# から始まるコマンドは、Postgresql のコマンドライン。

Postgresqlで uuid を生成しようとしたら、

  • uuid_generate_v1()
  • uuid_generate_v1mc()
  • uuid_generate_v3(namespace uuid, name text)
  • uuid_generate_v4()
  • uuid_generate_v5(namespace uuid, name text)

などがあるが、普通にインストールした状態だと使えない

使えるように、エクステンションを有効化しなければならない

しかし、このコマンドも失敗する。
使えるエクステンションの一覧は以下で見れる

この一覧に、 uuid-ossp がなければ contrib をインストールする必要がある。

手順

  1. yum list で、自分のバージョンの contrib を探す
  2. 中から、それっぽいのを探してインストール。バージョン別に同じようなのが複数表示される可能性があるので自分の使ってるバージョンとかも確認する。

  3. インストール
  4. インストールしたら、早速エクステンション一覧を見る。
  5. あった! uuid-ossp だ。

  6. 有効化する
  7. 確認する



[Grails (グレイルズ) ] flash で設定したメッセージが再度表示される

flash のスコープは、次のリクエストまで有効である。
以下のように flash にメッセージを入れて画面を表示した場合

すぐに render するとその次のリクエストでも値が有効になり、エラーメッセージが再度表示されてしまう。

想定としては、redirect した時にリダイレクト先で表示した view に値を渡す場合である。
以下の場合だと、show にリダイレクトしてその先で表示した view のリクエストまで有効であるので、その先には表示されない。

flash を使って、redirect ではなく render で表示した場合にメッセージの再表示を抑える方法は二つある。

  1. flash のメッセージを表示したら flash の内容を初期化する
  2. view 側で、以下のように flash.messagenull を入れる

  3. render の時は、flash ではなく request を使う
  4. contorller 側では以下のようにする

    view 側では以下のようにする

    お勧めというか、私がやった対応は、上記 1 の対応。
    処理によって、request だったり flash だったり切り分けるのが面倒なので、画面に表示する情報は全て flash スコープ変数に入れた。