第6回:テーブルを作っていじる(4)


テーブル名を変えてみる

テーブルを作ってはみたが、名前がきにいらねぇなぁこんちくしょう。とお嘆きの貴兄。 テーブルの名前を変更するには ALTER TABLE を使えばできる。
ALTER TABLE 変更前 RENAME TO 変更後;
こんな感じ。
前回(第5回)の続きで、前回で作った以下の address テーブルを使ってテーブル名を変えてみる。
CREATE TABLE address (
        id serial,
        name varchar(50),
        tel varchar(50),
        email varchar(50)
);
今の mydb のテーブル構成はこんな感じ。
mydb=# \d
          List of relations
      Name      |   Type   |  Owner
----------------+----------+----------
 address        | table    | postgres
 address_id_seq | sequence | postgres
(2 rows)
address テーブルと、address_id_seq シーケンスがあります。 テーブル名 address を meibo に変えてみる。次のようにする。
mydb=# ALTER TABLE address RENAME TO meibo;
うまくいったか表示してみる。
mydb=# \d
          List of relations
      Name      |   Type   |  Owner
----------------+----------+----------
 address_id_seq | sequence | postgres
 meibo          | table    | postgres
(2 rows)
テーブル名が meibo に変わってるね。
シーケンス名が address_id_seq のまんまやけど、このまま使えるかレコードを追加してみた。
現在の meibo テーブルの中身は前回の続きでこんな感じになってる。
mydb=# SELECT * FROM meibo;
 id  |  name   |   tel    |   email
-----+---------+----------+-----------
   1 | Watashi | 234-8900 | aa@bb.net
   2 | Omae    | 321-0000 | ff@bb.net
   3 | Anta    | 234-0000 | dd@ff.net
 101 | Watashi | 234-8900 | aa@bb.net
 102 | Omae    | 321-0000 | ff@bb.net
 103 | Anta    | 234-0000 | dd@ff.net
(6 rows)
これにレコードを一つ追加してみる。
mydb=# INSERT INTO meibo (name, tel, email) VALUES ('Nanasi', '345-7890', 'm@cc.net');
うまくいったかな?
mydb=# SELECT * FROM meibo;
 id  |  name   |   tel    |   email
-----+---------+----------+-----------
   1 | Watashi | 234-8900 | aa@bb.net
   2 | Omae    | 321-0000 | ff@bb.net
   3 | Anta    | 234-0000 | dd@ff.net
 101 | Watashi | 234-8900 | aa@bb.net
 102 | Omae    | 321-0000 | ff@bb.net
 103 | Anta    | 234-0000 | dd@ff.net
 104 | Nanasi  | 345-7890 | m@cc.net
(7 rows)
お、104 番で Nanasi さんが追加されてるね。
結論:テーブル名変えてもシーケンスには影響なし、と。

フィールド名(列名 or カラム名)を変えてみる

次に、フィールドの名前も変えてみる。 書式はこんな感じ。
ALTER TABLE テーブル名 RENAME COLUMN 変更前フィールド名 TO 変更後フィールド名;
フィールド id の名前を no に変えてみる。
mydb=# ALTER TABLE meibo RENAME COLUMN id TO no;
こんな感じで実行してみると、
mydb=# \d meibo
                                    Table "meibo"
 Column |         Type          |                     Modifiers
--------+-----------------------+----------------------------------------------------
 no     | integer               | not null default nextval('"address_id_seq"'::text)
 name   | character varying(50) |
 tel    | character varying(50) |
 email  | character varying(50) |
Unique keys: address_id_key
こんなんになった。id が no に変わってるね。 名前だけ変わってフィールド属性は生きてるんかいな。
ちゃんとシーケンス値が増加するかレコードを追加してみる。
mydb=# INSERT INTO meibo (name, tel, email) VALUES ('Dareda', '345-7890', 'y@cc.net');

mydb=# SELECT * FROM meibo;
 no  |  name   |   tel    |   email
-----+---------+----------+-----------
   1 | Watashi | 234-8900 | aa@bb.net
   2 | Omae    | 321-0000 | ff@bb.net
   3 | Anta    | 234-0000 | dd@ff.net
 101 | Watashi | 234-8900 | aa@bb.net
 102 | Omae    | 321-0000 | ff@bb.net
 103 | Anta    | 234-0000 | dd@ff.net
 104 | Nanasi  | 345-7890 | m@cc.net
 105 | Dareda  | 345-7890 | y@cc.net
(8 rows)
105 番に Dareda が追加されとるね。うまくいきました。

フィールド(カラム)を追加してみる

フィールドを追加してみようと思ふ。書式はこんな感じ。
ALTER TABLE テーブル名 ADD COLUMN フィールド名 フィールドタイプ;
レコードを追加した時刻が登録される modtime フィールドを追加してみる。
modtime フィールドの型は日付時刻型(TIMESTAMP)で、初期値が現在時刻になるようにする。 手順は、まず ALTER TABLE の ADD COLUMN 句で modtime フィールドを作って、 その初期値を SET DEFAULT 句を使って現在時刻が自動で入力されるようにする。 こんな感じ。
mydb=# ALTER TABLE meibo ADD COLUMN modtime TIMESTAMP;

mydb=# ALTER TABLE meibo ALTER modtime SET DEFAULT now();
うーん。実際にデータを追加して見る。
mydb=# INSERT INTO meibo (name, tel, email) VALUES ('Oira', '345-7890', 'p@cc.net');

mydb=# SELECT * FROM meibo WHERE name='Oira';
 no  | name |   tel    |  email   |            modtime
-----+------+----------+----------+-------------------------------
 106 | Oira | 345-7890 | p@cc.net | 2003-02-05 16:34:34.578364-05
(1 row)
うーん、ちゃんと 106 番に追加されて modtime の値が登録時の時刻になっとるね。
('03.02.05)

Back