SSブログ

PostgreSQL で SQL 文を使ってテーブル構造を知りたい [RDBMS]

自分用メモ

情報スキーマ
http://www.postgresql.jp/document/pg830doc/html/information-schema.html
標準 SQL に定義されているらしいが、PostgreSQL 特有のオブジェクトの情報とか取れない
最近のバージョンから実装されてる。

システムテーブルを見る
http://yukotan.blogspot.com/2007/10/postgresqlsql.html
http://server.typepad.jp/dragonfly/2006/03/postgresql_f52a.html
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k17.htm
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k24.htm

PgAdminIII のソースを見ろという話
http://soudan1.biglobe.ne.jp/qa3005397.html

追記 (2008/3/10) http://d.hatena.ne.jp/absj31/20080310/1205091108

特集:基礎から理解するデータベースのしくみ [RDBMS]

はてなで猛烈にブックマークされてて、なんじゃらほい、と思ったらすばらしい内容。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060127/228070/
随分前の記事のようだが、後で読む。


PostgreSQL コアメンバーの人が考える今後の RDBMS のシェアについて [RDBMS]

http://journal.mycom.co.jp/articles/2007/06/15/postgresql/index.html
http://journal.mycom.co.jp/photo/articles/2007/06/15/postgresql/images/013l.jpg
PostgreSQL の人が言ってるので PostgreSQL が一番になるっていうのは希望的観測なので割り引くとして、PostgreSQL 以外にとっては悲観的な数字のはずなのに Firebird が入ってて正直ホッとする。Other OSS-DB に合算されてなくて良かった。Firebird の現在のシェアも、世界的に見たらかなりあるんだろうなぁ。ひょっとして、俺は勝ち馬に乗ってるのか?
#この日記を読んでいればわかるが、日頃 SQLServer をいじってるのは秘密だ

それから何か(大規模じゃないとか、無料で手に入るとか)条件があるのかもしれないけど、Legacy Proprietary Databases を全部合わせてこれだけってことはなかろう。
(そうなったら面白いけど)

Derby ってなんじゃい、と思ったら
http://journal.mycom.co.jp/articles/2006/10/11/derby/
Java で書かれた組み込み用 RDBMS らしい。
基本的には、Java から使うんですね。どうりで知らないわけだ。

円グラフの中に入れるべきものではないからカウントされてないのかも知れないけど、SQLite は今後(見えないところで)ものすごく使われる予感。いや、既にものすごく使われてる予感。


SQLServer で日付時刻型から日付部分を抽出する [RDBMS]

SQLServer って、日付部分だけを持つ型ってないみたいだけど、まぁそれはいい。
日付時刻型(DateTime型)から日付部分を抽出したくなった。
Google 君に聞いたが、NVARCHAR に変換するっていう方法を使うしかないみたい。
(というか、一番正しいみたい)

select Convert(NVARCHAR, DATETIME_COLUMN, 111) from FOO


てな感じ。NVARCHAR に変換してるはずなのに

select DateAdd(d, 1, Convert(NVARCHAR, DATETIME_COLUMN, 111)) from FOO


で、日付を足して、DateTime型を返してくれる。
日付時刻型のフィールドに INSERT しようとするとも良きに計らってくれる。
なんかちょっといやだなぁ。

それから、以前に、日付→文字列変換のことをメモっていたのを忘れてて、
http://blog.so-net.ne.jp/nakagami/2006-09-29
自分で Google で発見するとがっくりくる


SQL Server 2005 → 2000 のバックアップ&リストアに失敗 [RDBMS]

えーっ、できないの?すごいショック。
2000→2005 なら、バックアップ&リストアはもちろんのこと、データーベースファイルをアタッチしても動くのに・・・

SQL Server 2000 のエンタープライズマネージャーと 。

SQL Server Management Studio Express の画面を貼っておく

誰かが、こうすればできるよってコメントしてくれるのを密かに期待している。


SQLServer に UNIQUE キーを張って全角/半角が同じものと判定されてることに気付く [RDBMS]

ユニークキーのカラムを作ってデータを投入しようとしたら、半角/全角 だけが違うものが制約エラーになる。
これ↓か。
http://www.microsoft.com/japan/msdn/sqlserver/sql2000/intlfeaturesinsqlserver2000.aspx
(手元の何も考えずにインストールした SQLServer の環境では)
データーベースを何も考えずに作ると、照合順序が Japanese_CI_AS になってる。

全角/半角だけでなく、ひらがな/カタカナも同じものとして扱ってるのか。
照合順序って、並べ替え(Order By 句)に使うために必要で UNIQUE の判定には関係ないと思ってた。

今回に限って言えば、Japanese_CS_AS_KS_WS のが良いような気がする。
カラム単位に照合順序の設定もできるみたいだけど、今回はデーターベース全体でいいや。
ここ↓を参考にして、
http://msdn2.microsoft.com/ja-jp/library/ms175835.aspx

ALTER DATABASE database_name COLLATE Japanese_CS_AS_KS_WS


でやりたいことができた。

さらに問題を発見。
NVARCHAR で(VARCHAR でも同じだと思うけど)ユニークキーと指定すると「あいうえお」と「あいうえお 」(最後に半角のスペースがあるかないか)を同じものと判定する。
これは、元データがいまいちなのも一因なので、データを直すことにしてみる。


Oracle Database 10g Express Edition インストール [RDBMS]

急に思い立って↓の続き。
http://blog.so-net.ne.jp/nakagami/2006-02-17
インストールしてみることにした。

ここ↓の右上の FREE DOWNLOAD (今回は、そのうちの Windows のほう)をクリックして
http://www.oracle.com/technology/products/database/xe/index.html
ライセンス条項に Accept した後に、いくばくかの個人情報を提供すると、

 	Oracle Database 10g Express Edition (Universal)
  	Download 	OracleXEUniv.exe (216,933,372 bytes)


がダウンロードできるようになる。

ちなみに OracleXEClient.exe もダウンロードできる。こっちで、コンソールの SQL*Plus がインストールできるけど、 SQL*Plus なら、サーバーをインストールすると一緒にインストールされるので、ダウンロードする必要はないように思う。今回は、試しにインストールしてみたけど。同じマシンに両方インストールしても大丈夫みたいではあるが。

OracleXEUniv.exe を実行すると、Install Shield が動いて(Java でないのね)メッセージも日本語。
途中で、SYSTEM のパスワードを聞いて来る。
ダウンロードは全部英語だけど、インストールは完璧に日本語化されててほとんど悩まない。

Oracle XE と、Oracle XE Client をインストールすると、以下の感じでインストールされるので、事前にポートは開けといたほうがいい。

インストール先フォルダ: C:\oraclexe\
'Oracleデータベース・リスナー'のポート: 1521
'Oracle Services for Microsoft Transaction Server'のポート: 2030
HTTPリスナーのポート: 8080

インストール先フォルダ: C:\XEClient\
'Oracle Services for Microsoft Transaction Server'のポート: 2030

インストールされたら、メニューから「データーベースのホームページに移動」で Web インターフェースで管理できるようになってる。日本語化もちゃんとされてて、ユニバーサル版だということを感じさせない。
インストールも含めて日本語版かと思える。


システムテーブル [RDBMS]

Firebird のシステムテーブルの見方はだいぶわかってきた。

Oracle の場合は、もっと見易い形でテーブルに入ってるみたい。
http://homepage2.nifty.com/BASH/oracle/info.html
Ora2Pg のソースを見ると良いかも。
http://www.thinkit.co.jp/free/marugoto/2/1/20/

SQLServer 2000 の場合 dbo.sysobjects (SQLServer 2005 の場合は sys.sysobjects)から見ていけばいいのか?

SQL Server 管理オブジェクト(SMO)というのがあるらしい
http://msdn2.microsoft.com/ja-jp/library/ms162169.aspx
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33713&forum=26&3


Firebird をインストール(Ubuntu) [RDBMS]

(via Firebird News)
Ubuntu に Firebird をインストールする Howto が公開された
http://www.firebirdsql.org/devel/doc/manual/temp/ubusetup.html
元になったのは、たぶんこれ↓
http://sourceforge.net/mailarchive/forum.php?thread_name=20070415063941.GA6053%40rodders.gedda.info&forum_name=firebird-docs

以下気付いた点だけメモ

Ubuntu 6.10 で

# apt-get install firebird2-super-server


を実行。(firebird2 という名前だけど)SuperServer版の Firebird 1.5.3 のインストールが始まる

Plase enter new password for SYSDBA user:


で SYSDBA のパスワードを聞いてくる。

インストールが終わった状態で、firebird というユーザーができてるので

# passwd firbird


で、パスワードを設定して su firebird でスイッチできるようにしておくと

# su -c "fbmgr -shut -password SYSDBApassword" firebird


で、手動でシャットダウンしたり

# su -c "fbmgr -start" firebird


で、手動で起動したりできる。

この状態でユーティリティツール(isql や gbak)は入ってないので、

# apt-get install firebird2-utils-super


でインストールする。
isql は isql-fb という名前になってる。



ちなみに、FreeBSD に関しては・・・
以前に、FreeBSD 6.1 に Firebird 1.5.3 を ports からインストールした話
http://blog.so-net.ne.jp/nakagami/2006-08-19
と、
FreeBSD に Firebird と PostgreSQL を共存しようとしてちょっとはまった話
http://blog.so-net.ne.jp/nakagami/2006-09-13


Grant と Revoke を、うまいこと使ってみたい [RDBMS]

とある業務システムでの話。
そろそろ本番稼動させましょうかねぇ・・・と、その前に、システムを運用するにあたって何か問題はないかねぇ、と関係者に意見を聞くことになった。
そこで言われたことが「データーベースにアクセスする権限を適切に分けてますか?」

?????

何が言いたいの?と聞いてみると、要は Grant を使って、ユーザー(実際にはプログラム)が必要としないテーブルにアクセスできない(とか読めれば良い場合に書き込みできない)ようになってますか?ということだそうです。
うーむ、おっしゃりたいことはわかりますが、そんな設計になってないので無理です。
(後でいちゃもんつけるのは楽だなぁ・・・。こういう多少わかる人がとっても困ります。)
教科書的には、そうかもしれませんが、いかにも、理屈はわかってますが実践してません、という人のような意見のような気がした。
実際は、そんなことしなくない?
僕の場合は、特別な場合を除けば、せいぜい読み書き用と、読み取り専用の2ユーザーを用意するくらいかなぁ。
標準 SQL 92 で定義されてるために、どの RDBMS でも Grant/Revoke が使えるようになってるけど、ものすごく使われてないような気がするのは僕だけ?

いや、本当は僕が無知だけなのかもしれないけど。
いずれにせよ、機能としてあるんだから Grant/Revoke と Role をうまく使って「なるほど、こういう風に使うのか」と感心されてみたいものではあるが。

Grant/Revoke(Role) が使われてないのは、視覚的にわかり辛いからなんでは、と思っているところ。

RDB を設計する場合は、いつも権限を細かく設計してるって人は、どんな感じに(どれくらい権限を細分化して)設計してるか教えてください。