2016-09-01 9 views
2

から値:PostgreSQLの挿入、私はこれを使用して選択クエリから値を挿入しようとしています選択クエリ

INSERT INTO cb (vol_sec) 
SELECT sum(vol) 
FROM cb 
GROUP BY cusec; 

が、エラーメッセージはERRORです:値null列«ID»制限がnullではない違反のため。私はNULLにNOT NULLを変更しようとしましたが、私は別のメッセージ '列<が主キーにあります。 このエラーを回避する手段はありますか?あらかじめご了承ください。

+2

テーブルのスキーマを共有してもよろしいですか? –

+1

あなたのターゲットテーブルは主キー(したがって 'NOT NULL')ですが、デフォルト値を持たない' id'カラムとしてあなたのターゲットテーブル。おそらく、シーケンスを追加するか(または適切な場合は既存のものを使用する)、そのシーケンスの次の値を取得するために 'id'に' DEFAULT'を設定する必要があります。もちろん、データベーススキーマの詳細やそのテーブルの使い方が、正確に何をすべきかに影響を与えるかもしれません。 – jcaron

+0

多くのフィールドのために、私はスキーマを共有することができました。 – user19566

答えて

2

ステップ従わが存在する必要があります:

  1. が制約PRIMARY KEY

    ALTER TABLE DROP schema.cb制約name_of_constraintをドロップします。

  2. update nulではありません。

    ALTER TABLE schema.cb ALTER COLUMN id DROP NOT NULL;

  3. 挿入を実行します。ターゲット表cb

2

idとして列が主キーであり、あなたがid列の任意のデフォルト値を定義していないようです。

cbテーブルに値を挿入すると、プライマリカラムidの値はありません。あなたはこの問題を抱えています。

ERROR: the value null for column «id» restriction violates not null.

プライマリキー列idに値を割り当てようとします。列のデータ型をserialに変更すると、自動的にインクリメントされます。 id

--drop TABLE cb; 
    CREATE TABLE cb 
    (
     id integer serial, 
     vol_sec integer, 
     --other columns, 
     CONSTRAINT pk_id PRIMARY KEY (id) 
    ); 

の更新されたデータ型のテーブルcbをドロップして作成 それはあなたのために働く願っています。

1

まずはお詫び申し上げます。皆さんのご意見は私がこの問題を解決するのに役立ちました。提案された手順に続いて、私は最終的にシリアル型として列(id)を挿入し、データが正常に挿入されたクエリを実行する必要がありました。ありがとう。

+0

あなたはあなたの問題を解決した答えを受け入れるべきです。 –

関連する問題