テーブルを作ってはみたが、名前がきにいらねぇなぁこんちくしょう。とお嘆きの貴兄。
テーブルの名前を変更するには 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 さんが追加されてるね。
結論:テーブル名変えてもシーケンスには影響なし、と。
次に、フィールドの名前も変えてみる。
書式はこんな感じ。
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)