でSELECT B(COL3、COL4、COL5、COL6)POSTGRESQL:INSERT INTO ...私は、2つのテーブル(ID、COL1、COL2)を有し、自動生成されたカラム
表Aの列 "ID" nullではなく、自動生成された主キーです。表AにテーブルBからデータを挿入するには
、私は
INSERT INTO A(col1, col2)
(SELECT col3, col4 from B)
をしようとしています。この文はエラー
ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, "abc", "def")
をスローし、私も
INSERT INTO A(id, col1, col2)
(SELECT DEFAULT, col3, col4 from B)
これはエラー
をスローを試してみましたERROR: syntax error at or near "DEFAULT"
postgresが列 "id"の値を自動生成しないのはなぜですか?テーブルBの "id"を指定した場合、または選択なしの単一行を挿入して自動生成列に "DEFAULT"キーワードを指定した場合、クエリが機能します。
EDIT: テーブル作成クエリ
CREATE TABLE A
(
id bigint NOT NULL,
col1 character varying(10),
col2 character varying(10),
CONSTRAINT A_pk PRIMARY KEY (id)
);
ALTER TABLE A OWNER TO user1;
CREATE SEQUENCE A_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE A_id_seq OWNER TO user1;
ALTER SEQUENCE A_id_seq OWNED BY A.id;
共有テーブルを作成するために使用したテーブルクエリを作成します。 –
@ Code-Monk CREATE TABLE A(id bigint NOT NULL、col1 character varying(10)、col2 character varying(10)、CONSTRAINT A_pk PRIMARY KEY(id)); user1の所有者を変更します。 CREATE SEQUENCE A_id_seq 1つの増分で1つの増分なしで最大1つのキャッシュなし1; ALTER TABLE A_id_seqユーザーuser1; ALTER SEQUENCE A_id_seqは、A.idが所有します。 –