since 2002/01/01
lastupdate 2003/01/16
   

基本的な事 - その他

PostgreSQLの基本的なことの、その他の情報です。


テーブルへのアクセス権の設定

さて、通常作成したテーブルは、それを作成したユーザまたはスーパーユーザしかアクセスできません。 これでは PHP などでアクセスする場合に困りますので、明示的にアクセス権を与える必要があります。
アクセス権の設定には GRANT を使います。

構文 GRANT 権限 ON テーブル名 TO ユーザ名 ;

権限には、どういった権限を与えるか設定します。これには次のようなものを設定できます。

  • SELECT => テーブルに対し SELECT 文を許可します。テーブルのデータを見るのに必要です。
  • INSERT => テーブルに対し INSERT 文を許可します。データを追加するために必要です。
  • UPDATE => テーブルに対し UPDATE 文を許可します。データの更新に必要です。
  • DELETE => テーブルに対し DELETE 文を許可します。データの削除に必要です。
  • RULE => テーブル/ビューにルールを定義できるようにします。
  • ALL => 全ての権限を与えます。

また、ユーザ名には権限を設定するユーザ名を指定しますが、PUBLIC とすることで全てのユーザを対象とすることが出来ます。
では、実際にテーブル zaiko にアクセス権を設定してみましょう。 psql でデータベース TEST へ接続し、次のコマンドを入力します。

TEST=# GRANT ALL ON zaiko TO nobody;

アクセス権の設定に成功すれば、 CHANGE と表示されます。
ちなみにこれによりテーブル zaiko はユーザ nobody で全ての操作を行えます。

ファイルからコマンドを渡す

さて、実際に PostgreSQL を使うとなった場合、たくさんのテーブルを作ることになるでしょう。 そういうときに、いちいち全部の SQL を psql の中で打つのは面倒です。
そこで私が良く利用するのは、psql のバックスラッシュコマンド ¥i です。
これはあらかじめテキストファイルに入力するべきコマンドや SQL 文字列を記述しておき、 ¥i コマンドにより、 ファイルを読み込ませ一度に処理を行わせる、というものです。
これにより、作ったスキーマの保存もかねますし、面倒な更新手続きも1回書いておけば読み込むだけで何度でも同じ作業を実行できるので、 結構便利です。具体的には、このような ファイルを作ります。(テキストファイルで文字コードはEUCです。)

簡単に説明すると、テキストに書いてあるとおりですが、zaiko テーブルを作成しデータを数件挿入、 その後シリアル値の値をセットして (しなくても行けますけど...) 最後にそのテーブルを表示しています。
実際に使うには、とりあえずこのテキストをコピーして、psql が読み込めるディレクトリに保存します。 ここでは、/home/postgres/zaiko.txt として保存したとしましょう。また、データベース名は TEST とします。
その場合、次のようにすればファイルを読み出し、処理を実行してくれます。

$ cd /home/postgres
$ psql TEST
TEST =# ¥i zaiko.txt

簡単ですね(^^)
私は主にこの方法でテーブルを作っていますが、他の上級ユーザの方はどうなんでしょうね?

ファイルからデータを読み込む

次は、たくさんのデータを一度に入力する場合に有効な手段です。
psql には ¥copy というコマンドがあり、 これによりタブ区切りのテキストファイルからデータをインポートすることができます。 1行が1つのレコードになるタブ区切りのデータを用意し、¥copy コマンドでインポートできます。
サンプルは用意していないので、詳しく知りたい場合は psql のマニュアルを見てください。