データベースを利用するCGIプログラミング

---- データの入力 ----


テーブルにデータを格納する方法には、大きく分けて次の3通りあります。

  1. SQLのinsert文で行なう。
  2. psqlの\copy文を用いて行なう。
    データベース管理システムには、一般にこのようなユーティリティと呼ばれる機能が備え付けてあります。 この方法は、それを利用するというものです。
  3. プログラムを作成しそれを用いて格納する。

データベースの初期作成のように、データを大量にテーブルに格納する場合は、2、3を用い行ないます。 それに対して、すでに出来ているデータベースに少量のデータを追加する場合は、1の方法で行なうことが多いです。 データベースに入力するデータを特別なルーチンでチェックする必要がある場合などは、3の方法で行なう必要があります。
ここでは、1 と 2の2通りの方法を示しておきます。


  1. SQLのinsert文を用いたデータの追加
    次の3行のデータをmeiboテーブルに追加する例を以下に示します。

    namaetoshiaddretel
    ハル2宇部市0836-88-8888
    ミミ2宇部市0836-33-3333
    ポチ10山口市0839-66-6666

    上記3行のデータを次のように3つのinsert文でひとつづつ追加して行きます。

    egi=> insert into meibo values ('ハル', 2, '宇部市', '0836-88-8888');
    INSERT 145964 1
    egi=> insert into meibo values ('ミミ', 2, '宇部市', '0836-33-3333');
    INSERT 145965 1
    egi=> insert into meibo values ('ポチ', 10, '山口市', '0839-66-6666');
    INSERT 145966 1
    egi=>
    

    追加した内容がどのように格納されているか、select文を用いて全検索をしてみます。

    egi=> select * from meibo;
    namae|toshi|addre |         tel
    -----+-----+------+------------
    ハル   |    2|宇部市  |0836-88-8888
    ミミ   |    2|宇部市  |0836-33-3333
    ポチ   |   10|山口市  |0839-66-6666
    (3 rows)
    
    egi=> 
    

  2. psqlの \copyコマンドを用いた追加
    insert文で一行づつデータを追加する方法は簡単そうですが、データ量が多いとコマンド入力が大変な作業になります。
    そこで、入力するデータをテキストファイルに一旦作成しておいて、そのファイルの内容をデータベースへ移すことができます。この移す作業をしてくれる命令が\copy命令です。

    例えば次の2件のデータを上記のテーブルmeiboに登録したいとします。

    namaetoshiaddretel
    クー4宇部市0836-99-9999
    サチ3下関市0832-77-7777

    すると、あらかじめ上記の内容をファイルにエディター(例えばxemacs)を用いて作成しておきます。ここではそのファイルmeibo.dataという名前に上記の内容を入力しておきます。 入力方法は、テーブルの1行をファイルの1行とし、カラム値とカラム値の間は1つ以上のタブ(tab)で区切ります。

    [egi@myouga]$ xemacs meibo.data
    [egi@myouga]$ more meibo.data
    クー     4      宇部市      0836-99-9999
    サチ     3      下関市      0832-77-7777
    [egi@myouga]$ 
    

    次に、psql のなかで、\copy命令を用いてコピーします。

    egi=> \copy meibo from ./meibo.data    <======= 追加命令
    Successfully copied.
    egi=> select * from meibo              <======= 追加確認をする
    egi-> ;
    namae     |toshi|addre       |         tel
    ----------+-----+------------+------------
    ハル      |    2|宇部市      |0836-88-8888
    ミミ      |    2|宇部市      |0836-33-3333
    ポチ      |   10|山口市      |0839-66-6666
    クー      |    4|宇部市      |0836-99-9999
    サチ      |    3|下関市      |0832-77-7777
    (5 rows)
    
    egi=> 
    

    確かに2件のデータが追加されています。


江木鶴子 : egi@ube-c.ac.jp