[pgsql-jp: 32732] Re: テーブル属性を知るSQL ってありますか?

SAKATA Tetsuo sakata.tetsuo @ lab.ntt.co.jp
2004年 4月 9日 (金) 08:01:02 JST


おはようございます。坂田@横須賀です。

鈴木 久美 wrote:
> 実はアプリケーションプログラムのバグとかCSVファイル
> からのインポートなどでnullが項目に入ってしまうことが
> あります。

老婆心ながら、こういう場合には、
・問題のバグを取る
・CSVファイルは「洗濯」してからDBに投入する
などの根本的な対策をするのがベターかと思うのですが、それはさておき…

> そこでnullの項目を属性にあった初期値に更新したいのです。
> Postgresqlのテーブルの項目名とその属性を知るSQLって
> ありますか?
> そうすれば項目名が変更したり増えたりしてもプログラムを
> 変えずにすむので便利なんですけど…

どのような事態が生じていてお困りなのか、詳細にはわからないため、
はずしているかも知れません。

ご希望のものではありませんが、DBのスキーマ定義にて、
デフォルト値を定義してしまうのは如何でしょうか。

○属性(数値とか文字列とか)ごとに、(NULL以外の)デフォルト値を
 設定した型を create domain で作っておき
○現在、数値型や文字列型が使われている表の定義を、
 そのドメイン(定義域)で置き換えたDBを「別途」生成する。
○既存のDBを適当な方法で吸い出してから、上記で生成したDBへ
 流し込む。
 (既存DB内のNULLがどのように振舞うかは未検討です。
  また、この段階では一旦DBのサービスを停止する必要があります)

おそらく、考えていらっしゃるのは、

●既存DBの表名、列名、属性を知るツールを使って一覧表を作り、
●一覧表を見ながら、NULL値を適当なデフォルト値に置き換える
 変換ツールを作成しておいて、
●適当な契機で変換ツールを起動して、NULL値を置き換えてしまう
 (これを定期的に実行する)

という手順でしょう。しかし、最後の「適当な契機」をいつにすべきかの
判断が難しいのではないかと愚考します。

ご参考になれば幸いです。
-- 
坂田 哲夫@NTT サイバースペース研究所
sakata.tetsuo _at_ lab.ntt.co.jp
SAKATA, Tetsuo. Yokosuka JAPAN.




pgsql-jp メーリングリストの案内