• ベストアンサー

varcharの長さ変更

既に作成したテーブルのvarcharを変更したいのですが、 mysqlにあるようなmodify機能のようなものはPostgresにはないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.2

バージョンによって方法が異なるそうです。 8.0以上であれば、#1さんの ALTER TABLE ALTER COLUMN TYPE それ以前であれば、 BEGIN; ALTER TABLE tab ADD COLUMN new_col new_data_type; UPDATE tab SET new_col = CAST(old_col AS new_data_type); ALTER TABLE tab DROP COLUMN old_col; COMMIT; こちらからの受け売りです。 詳細はこちらをどうぞ。 http://www.linux.or.jp/JF/JFdocs/PostgreSQL-FAQ.html

aiurai54
質問者

お礼

バージョンが古いとできないと思っていました。 こういった方法もあるんですね~。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • proust
  • ベストアンサー率57% (62/108)
回答No.1

PostgreSQLのバージョンは何ですか? 今手元に環境がないですが create table table1 ( aaa varchar(1) ); ALTER TABLE ALTER aaa TYPE varchar(2) ; ということでしょうか?

aiurai54
質問者

お礼

ありがとうございます。バージョンは7.4です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MySQL5.1で varchar(100)のものを varchar(

    MySQL5.1で varchar(100)のものを varchar(90)にする予定です。 (後ろの10バイトは無条件になくなっても構いません) 通常の手順ではalter tableを使います。 今回は、他の項目も変更(auto_incrementやキーの追加)するので 一度 mysqldumpでSQLを吐き出して、 CREATE文の以下を変更 varchar(100) → varchar(90) auto_incrementやキーの追加 そして、mysqlでリストアします。 この方法は、アリでしょうか? 他のデータベース(PostgreSQL, SQLServer, Oracle)でも使える手法でしょうか? 皆さんのvarchar(100) → varchar(90)する方法が知りたいです。

    • ベストアンサー
    • MySQL
  • 「VARCHAR(255)」を「text」に。種別変更

    MySQL 4.0.27を利用しております。 操作はphpMyAdminで行っております。 1つの項目がかなりの文字数になりつつあり、 VARCHAR(255)では、入りきらないデータがでてきました。 そこで「VARCHAR(255)」を「text」に変更しようと 思います。 この時、データが入ったまま種別変更を行っても データが消えたりすることはないでしょうか? もしよければ「text」にした場合のデメリットも お教えください。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL4.1以上でのchar,varcharの定義について

    環境はWindowsXP + MySQL5.0です。 MySQL5.0でテーブルを作成したところ、varchar(10)の列に入力可能なデータは『10バイト分』でななく『10文字分』でした。 (「1234567890」や「abcdefghij」に加え、「あいうえおかきくけこ」も入力可能だった) 従来(?)の『varchar(10) = 10バイト分入力可能』で定義したいのですが、なにか方法はないでしょうか? (「1234567890」や「あいうえお」は入力可能だが、「あいうえお1」は入力不可にしたい) http://www.mysql.gr.jp/frame/modules/bwiki/index.php?FAQ#u0cc977e ↑こちらのページによると、MySQL4.1からこのような仕様になったようですが、MySQLのバージョンは5.0のままでなにか方法はないものかと探しております。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • varcharでの最大値抽出

    すいません。お教えください。 Mysql5.0.15で以下のテーブルを作成した時、数値の最大値(1010)を抽出したいのですがどのようにすれば抽出できるのでしょうか?お教えください。 テーブル名:B フィールド名,フィールドタイプ,備考 b_id,int(10),auto_increment b1,varchar(10) b_id,b1 1,999 2,1000 3,1000-1 4,1010 5,800 重ねて質問させてください。 select max(b1) from b;とした場合 999としか表示されません。 これもなぜなんでしょうか。

    • ベストアンサー
    • MySQL
  • Postgresのことで・・・

    質問があります。 --test_tbl---------------------- id : integer uid : varchar(32) name : varchar(64) day :date -------------------------------- という上記のテーブルがあるとします。 このテーブルのnameフィールドを varchar(64)からvarchar(120)に変更したいのですが どのようにすればいいでしょうか? Postgresのヴァージョンは7.3.2です。 宜しくお願いいたします。

  • varcharの比較

    こんにちは。 DBのテーブル(test_tbl)が ID varchar update varchar となっているときにupdateがたとえば20040501よりもあとのものをJSPで表示させたいとします。その場合、数値型にしないと比較はできないのでしょうか? varcharどうしで比較する方法があると聞いたのですがどうやるのかわかりません。 (データ) ID   update 1 20040410 2 20040612 3 20040520 のときはIDが2と3のみ表示させたいのです。 よろしくお願いします。

  • varcharからnumericへの型の変更

    お願いします。 環境 PostgreSQL 8.1 どなたか、 varcharからnumericへの型の変更 する方法をご存知ないでしょうか

  • Varcharサイズ変更後にエラー

    こんにちは。宜しくお願いします。 かなり古いシステムでVB6で開発されているものがあるのですが、昨日、データーベース(SQLServer2005)のとあるテーブルの列のサイズをVarchar(1000)からVarchar(2000)へ変更しました。 すると、いままで問題なく稼動していたシステムにエラーが発生しまして、デバッグしてみると、SELECT文で取得した変更箇所の列の値が、NULLで戻ってきました。 NULL値の対策として、IsNull関数を使用して、NULL値の場合には、別の文字列に変換するようにしてあるのですが、IsNull関数ではNull=Falseを返します。 いろいろネットで文献を探しまして、Where句に指定している列名をSELECT句に含まないといけないという記述を発見しましたが、実行しても結果は変わりませんでした。 なにかSQLServer側で意識しなくてはいけない事があるのでしょうか。 当方、DBにはあまり詳しくないので、原因に心当たりのある方はご教授頂ければ幸いです。

  • MySQLのvarcharについて

    今までPostgreSQLを利用していたのですが、MySQLもテストで一回使ってみよと思い触ってみたところ・・・ varchar(20)のカラムに、文字列型で「4571170731101」という値を登録するとDB上では「2147483647」となってしまいます。 int型?とかに解釈されてるんでしょうか。意味がわかりません。 どなたか助けてください。

    • ベストアンサー
    • MySQL
  • MySQLのvarchar型とtext型について

    以下のURLのページを読んだのですがよく理解できません。。。 http://dev.mysql.com/doc/refman/4.1/ja/storage-requirements.html http://dev.mysql.com/doc/refman/4.1/ja/blob.html 例えば'abc'という文字列を格納するとした場合、記憶容量は varchar型では3+1バイト、text型では3+2バイトとなるようですが、 1バイト(varchar)と2バイト(text)の違い以外で、 text型の方がDBに負担がかかるとか不利になるようなことはありますか? text型では格納する文字列の長さに関係無く、65535バイトを常に確保しているとか… text型の方が動作が遅いとか… 現状、255バイト以下を想定しているのでvarchar(255)にするつもりですが、 将来的に256バイト以上となることもありえるので 最初からtext型にしていた方がいいのでしょうか? また、将来text型に変更した際にパフォーマンスが落ちる等といったことがありえるのでしょうか? 宜しくお願い致します。