• ベストアンサー
  • 困ってます

PostgreSQLの「not null」制約の追加

こんにちは。いつもお世話になります。 PostgreSQLのversion7.2.8で、「not null」制約の追加、削除の方法をおたずねします。よろしくお願いします。 ALTER TABLE テーブル名 ALTER COLUMN カラム名 SET NOT NULL; で試したところ、syntaxエラー(構文エラー)で失敗。 ALTER TABLE テーブル名 ALTER COLUMN カラム名 DROP NOT NULL; で試してみても、同じくsyntaxエラーです。 version7.2.8が原因でしょうか? また、version7.2.8でも「not null」制約の追加、削除が できる他の方法はありますでしょうか? テーブルを作り直さずに、 既存のテーブルのカラムへの制約の追加、削除をしようとしています。 よろしくお願いします。

noname#106387
noname#106387

共感・応援の気持ちを伝えよう!

  • PostgreSQL
  • 回答数1
  • 閲覧数1141
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1

マニュアルを見てみたところ、ALTER TABLEでの既存列のNOT NULLの追加や削除は、PostgreSQL 7.3で実装のようですね。 >テーブルを作り直さずに、既存のテーブルのカラムへの制約の追加、削除をしようとしています。 ALTER TABLEで、NOT NULLを許可しない列の追加などを行うと、内部的にはテーブルの作り直しが行われますよ?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答いただき、ありがとうございます! やはり出来ないのですね>< >内部的にはテーブルの作り直しが行われますよ? ALTER TABLEは内部的に作り直しになるんですね。なるほど。 ということは、別のテーブルを作成して、 中身を移すという方法でやってみます。 勉強になりました!ありがとうございます!!!

関連するQ&A

  • NOT NULL 制約の削除

    MSSQL(SQLServer2000)にて、NOT NULLの列制約をはずすにはどうしたらよいのでしょうか。 ALTER TABLE <テーブル名> ALTER COLUMN <列名> DROP NOT NULL をやってみたのですが、構文エラーになってしまいます。 よろしくお願いします。

  • テーブルのフィールドにNot null制約を付けたい

    お世話になります。 既存テーブルにフィールドを追加する方法は わかっているのですが、その追加したフィールドに not null制約を付けるにはどのようなコマンドを 実行する必要があるのでしょうか。 ↓のコマンドには制約をつけるオプションはないですよね。。 ALTER TABLE テーブル名 ADD (カラム名 カラム定義) よろしくお願いします。

  • DB2 「既存カラムへのnot null制約の付与・削除方法について」

    DB2有識者の方々へ マニュアルをみたのですが、alter tableでは駄目なのでしょうか? すみません。よろしくお願い致します。 <質問1> 既存カラムへnot null制約を付与したいのですが、コマンドを教えてください <質問2> 既存カラムについた、not null制約を削除したいのですが、コマンドを教えてください よろしくお願い致します。

  • modifyでnot nullを追加出来ない

    My SQL バージョン5.5です。 学校で習っている時に 追加で、 not nullを設定しようと思い、 modify文を色々試して使いましたが Syntaxのエラーが出て、 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' c_pass not null' at line 1 (※c_pass はカラム名です) change 型名(桁数)を使うと変更できました。 なぜmodifyなどでは追加変更出来なかったのか、原因がわかる方はいらっしゃいますか? バージョンの問題ですか?

    • ベストアンサー
    • MySQL
  • NOT NULL制約カラムにNULLが格納される

    SQLite3でテーブル作成する際、カラムをテキスト型にして、NOT NULL制約をつけているのですが、NULLも普通にINSERTされてしまいます なんででしょうか?

  • MySQLのNOT NULL制約について

    MySQLでは、あるカラムをNOT NULL制約にしていたとしても、文字列型には空文字が、数値型には0を保存できます。 NULL、空文字、0をそれぞれ区別している仕様自体は問題ないと思いますが、NOT NULL制約のようにあるカラムで特定の値を許可しないような設定でできないのでしょうか。

    • ベストアンサー
    • MySQL
  • DB2でUNIQUE制約を削除したい

    DB2で以下のように明示的な名前のないUNIQUE制約を削除したいのですが、よい方法をご存じの方がおられましたらご教授ください。 (例) 1. 表の作成 CREATE TABLE TEST ( COL1 INT NOT NULL) 2. 明示的な名前を作成せずにUNIQUE制約を作成 ALTER TABLE TEST ADD UNIQUE (COL1); 上記のように名前指定しなかったUNIQUE制約を ALTER TABLE文で削除したいのですが、どのように すればよろしいのでしょうか? マニュアルの構文では制約名を指定する必要あるようで、 syscat.tabconstカタログで自動でつけられた制約名を調べた後、 以下のように指定したところ制約は削除されました。 (例) ALTER TABLE TEST DROP CONSTRAINT SQL090123084403480 しかしプログラムの修正が少なくなるよう、制約名を調べずにALTER TABLE 一文で削除できないものかと悩んでおります。 もしくはストアドプロシージャでも構いません。 よろしくお願いします。

  • PostgreSQLからMySQLへ変換

    現在ECサイトに追加カスタマイズ機能を導入したいと考えているのですが、 その際の使用コードが以下のようにPostgreSQLの記載となっており、 使用しているphpMyAdminにてSQLコードを入力するとエラーとなってしまいます。 ↓PostgreSQLコード CREATE TABLE dtb_bookmark ( bookmark_id serial NOT NULL, customer_id integer NOT NULL, product_id integer NOT NULL, memo text, create_date timestamp without time zone NOT NULL, update_date timestamp without time zone NOT NULL, del_flg integer ); ALTER TABLE ONLY dtb_bookmark ADD CONSTRAINT dtb_bookmark_pkey PRIMARY KEY (bookmark_id); COMMENT ON TABLE dtb_bookmark IS 'お気に入り情報'; エラーはtimestamp型とALTER以降の文で発生致します。 mysql文にて解釈させるにはどのように変更したらよろしいのでしょうか? 使用mysqlバージョンはMySQL 4.1.21です。 アドバイスなど頂けましたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • NOT NULL制約がついた項目のUPDATEについて

    基本的な事で申し訳ありません。 Oracle10g を使用していますが、 SQLのUPDATE文で主キーではない、 NOT NULL 制約がついたVARCHAR2(30)の項目を ''(ブランク)で更新しようとした所エラーが返されました。(ORA-01407) NULLで更新するのではないから大丈夫かと思っていたんですが、 NOT NULL 制約がついているとブランクでも更新ができないのでしょうか?

  • NOT NULL と NOT NULL WITH DEFAULT

    CREATE TABLE でテーブルを作成するときに指定する、 「NOT NULL」 と 「NOT NULL WITH DEFAULT」 の違いを教えてください。 また、どういう時に使い分けるのかも教えてもらえるとうれしいです。 よろしくお願いします。