[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 メーリングリストの案内