重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いいでしょうか?

例えば

create table t(i int,b bigint);
で作ったデータを
create table t(i int,b text);
に変更したいのですがどうしたらいいでしょうか?

実際はこんな簡単なテーブルではなくカラムは多く
元のテーブルには大量のデータがインサートされています
データもbigintからtextに変更しなければなりません

A 回答 (4件)

SQL だけで出来ます。



・方法1
alter table t alter column b type text;

・方法2
select i, cast(b as text) into table t2 from t;
alter table t rename to t_old;
alter table t2 rename to t;

・方法3
create table t2(i int,b text);
insert into t2 select i, cast(b as text) from t;
alter table t rename to t_old;
alter table t2 rename to t;
    • good
    • 0
この回答へのお礼

回答ありがとうございます
方法1はデータが壊れると思っていましたがうまくいきますね
自動的に保存データがtextに変わりますね
御提案の方法を見ていて方法3でないとダメだと思っていたら以外でした

お礼日時:2025/02/13 13:00

No2です。


データベースの取り扱い方法が不明ですので、想像でしか書けませんが当該テーブルの"b"カラムのフォーマットを変更すると、テーブルにデータを追加する、削除する、編集する、などのソフトウエアもそっくり改造しないと、テーブルにアクセスできなくなってしまいます。
いっその事当該テーブルはそのままに、"text"フォーマットの"b"カラムを含んだ新しいテーブルを作成して...例えば...

name, b(text)

とすれば、ソフトウエアが新しくならないとこのテーブルにアクセスすることはできませんが、少なくとも下位互換のあるテーブル群にできそうに思います。
    • good
    • 0
この回答へのお礼

alter table t alter column b type text;
で見事にできました

お礼日時:2025/02/13 13:03

テーブルは作成し直しを前提にご連絡します。

もっといい方法があるかも知れませんが、私の知識で思い浮かぶのはこれぐらいです。

●"pg_dump [アカウント] -t [Table] > backup.txt"を使って当該テーブルをテキストファイルに落とします。
●テキストエディタなどでカラム定義を"bigint"から"text"に書き換えます。
●テキストエディタ、又はsedなどのストリームエディタで"b"カラムに格納されたデータを実際の"text"に書き直します。
●当該テーブルをDBから削除した後、バックアップその後編集したテーブルリストアします。

もしかしたら、工夫すればバックアップテキストの編集にMicrosoft Excellを使えるかも知れませんね。
    • good
    • 0
この回答へのお礼

ありがとうございます
SQL文だけでは難しそうですね

お礼日時:2025/02/13 12:07

とりあえず思いつく方法は、


1)現在のテーブルデータをCSVファイルで出力(区切り記号はTAB等を使う)
2)現在のテーブルと同様だけど、bigintをtextに変えた新しいテーブルを作る
3)新しいテーブルに、CSVファイルからデータを読み込む
4)現在のテーブルを違う名前にリネーム、新しいテーブルを現在のテーブルの名前に変更する

こんな手順が思いつきます。
    • good
    • 0
この回答へのお礼

ありがとうございます
プログラミングが必要ということですね
phpを使っているんでphpでデータを取り込んで
phpで書き込みというやり方しかないのかもしれませんね

お礼日時:2025/02/13 12:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A