PostgreSQL
について
列を異なるデータ型に変換するには以下のようなコマンドを使用してください。 ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2); |
|
| データー型の変更 | |
|---|---|
beniya=# ALTER TABLE bhnmst_test1 ALTER COLUMN bhn_kousu TYPE numeric(5,2); ERROR: parser: parse error at or near "TYPE" beniya=# ALTER TABLE bhnmst_test1 ALTER bhn_kousu TYPE numeric(5,2); ERROR: parser: parse error at or near "TYPE" beniya=# ALTER TABLE bhnmst_test1 ALTER bhn_kousu type numeric(5,2); ERROR: parser: parse error at or near "type" b |
これではダメですね。 |
| 手順 | 参考 | SQL文 | |
|---|---|---|---|
| 1 | まず 元データー を 退避する。 | テーブルのコピー | CREATE TABLE bhnmst_test1 AS SELECT * FROM bhnmst; |
| 2 | 変更する column 名 を変える | Column名の変更 | ALTER TABLE bhnmst RENAME bhn_kousu TO bhn_kousu_1; |
| 3 | 新columnを追加する。 | Columnの追加 | ALTER TABLE bhnmst ADD bhn_kousu numeric(5,2); |
| 4 | 旧データーを新Column にコピー | UPDATE 文 | UPDATE bhnmst SET bhn_kousu = bhn_kousu_1; |
| 5 | 旧column を削除する。 | 参考スレッド | このバージョンでは出来ないのか? |
/****************************************
** テスト用の簡単テーブルを作る。
**
**
*****************************************/
DROP TABLE a_attr1;
CREATE TABLE a_attr1 (
a1 char(10) Primary Key,
a2 varchar,
a3 numeric(3,2) --後で変更予定
);
|
|
| テーブルの作成 | |
|---|---|
beniya-# \i a_attr1.sql psql:a_attr1.sql:6: ERROR: table "a_attr1" does not exist psql:a_attr1.sql:11: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'a_attr1_pkey' for table 'a_attr1' CREATE |
| データーを挿入し確認する。 | |
|---|---|
INSERT INTO a_attr1 values( 'abe','sssssss',0.26);
INSERT 22426 1
beniya=# select * from a_attr1;
a1 | a2 | a3
------------+----------+------
abc | なんたら | 1.02
abd | こうした | 0.23
abe | sssssss | 0.26
(3 rows)
|
|
| 手順 | 参照 | ||
|---|---|---|---|
| 1. | テーブルの名前を変える | ALTER TABLE RENAME | ALTER TABLE a_attr1 RENAME TO a_ttr1_OLD; |
| 2. | INDEX の削除 | DROP INDEX | DROP INDEX a_attr1_pkey; |
| 3. | テーブル構造を変える | a_attr1.sql を変える | a3 numeric(3,2) -> a3 numeric(5,2) に修正する。 |
| 4. | 新規テーブルを作る。 | \i a_attr1.sql を参照 | \i a_attr1.sql |
| 5. | 退避先から復元 | INSERT INTO | INSERT INTO a_attr1 SELECT * FROM a_ttr1_OLD; |
| 6. | 確認 | 内容確認 | データーの確認 |
| 7. | 退避テーブルを削除する。 | DROP TABLE |
select * from a_attr1;
a1 | a2 | a3
------------+----------+------
abc | なんたら | 1.02
abd | こうした | 0.23
abe | sssssss | 0.26
(3 rows)
beniya=# select \d a_attr1;
Table "a_attr1"
Column | Type | Modifiers
--------+-------------------+-----------
a1 | character(10) | not null
a2 | character varying |
a3 | numeric(5,2) |
Primary key: a_attr1_pkey
|
|
| 目次に戻る |
Last Update 2005/02/06 01:46 JST